Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/changelog/125881.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 125881
summary: Fixes a invalid warning from being issued when restoring a system data stream from a snapshot.
area: "Data streams"
type: bug
issues: []
Original file line number Diff line number Diff line change
Expand Up @@ -539,9 +539,19 @@ private void validateDataStreamTemplatesExistAndWarnIfMissing(
Set<String> templatePatterns = streams.filter(cit -> cit.getDataStreamTemplate() != null)
.flatMap(cit -> cit.indexPatterns().stream())
.collect(Collectors.toSet());
warnIfIndexTemplateMissing(dataStreamsToRestore, templatePatterns, snapshotInfo);
}

for (String name : dataStreamsToRestore.keySet()) {
if (templatePatterns.stream().noneMatch(pattern -> Regex.simpleMatch(pattern, name))) {
// Visible for testing
static void warnIfIndexTemplateMissing(
Map<String, DataStream> dataStreamsToRestore,
Set<String> templatePatterns,
SnapshotInfo snapshotInfo
) {
for (var entry : dataStreamsToRestore.entrySet()) {
String name = entry.getKey();
DataStream dataStream = entry.getValue();
if (dataStream.isSystem() == false && templatePatterns.stream().noneMatch(pattern -> Regex.simpleMatch(pattern, name))) {
String warningMessage = format(
"Snapshot [%s] contains data stream [%s] but custer does not have a matching index template. This will cause"
+ " rollover to fail until a matching index template is created",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;

import static org.elasticsearch.core.Strings.format;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.equalTo;
import static org.mockito.ArgumentMatchers.any;
Expand All @@ -48,6 +49,50 @@

public class RestoreServiceTests extends ESTestCase {

/**
* Test that {@link RestoreService#warnIfIndexTemplateMissing(Map, Set, SnapshotInfo)} does not warn for system
* datastreams.
*/
public void testWarnIfIndexTemplateMissingSkipsSystemDataStreams() throws Exception {
String dataStreamName = ".test-system-data-stream";
String backingIndexName = DataStream.getDefaultBackingIndexName(dataStreamName, 1);
List<Index> indices = List.of(new Index(backingIndexName, randomUUID()));

var dataStream = DataStream.builder(dataStreamName, indices).setSystem(true).setHidden(true).build();
var dataStreamsToRestore = Map.of(dataStreamName, dataStream);
var templatePatterns = Set.of("matches_none");
var snapshotInfo = createSnapshotInfo(new Snapshot("repository", new SnapshotId("name", "uuid")), Boolean.FALSE);

RestoreService.warnIfIndexTemplateMissing(dataStreamsToRestore, templatePatterns, snapshotInfo);

ensureNoWarnings();
}

/**
* Test that {@link RestoreService#warnIfIndexTemplateMissing(Map, Set, SnapshotInfo)} warns for non-system datastreams.
*/
public void testWarnIfIndexTemplateMissing() throws Exception {
String dataStreamName = ".test-system-data-stream";
String backingIndexName = DataStream.getDefaultBackingIndexName(dataStreamName, 1);
List<Index> indices = List.of(new Index(backingIndexName, randomUUID()));

var dataStream = DataStream.builder(dataStreamName, indices).build();
var dataStreamsToRestore = Map.of(dataStreamName, dataStream);
var templatePatterns = Set.of("matches_none");
var snapshotInfo = createSnapshotInfo(new Snapshot("repository", new SnapshotId("name", "uuid")), Boolean.FALSE);

RestoreService.warnIfIndexTemplateMissing(dataStreamsToRestore, templatePatterns, snapshotInfo);

assertWarnings(
format(
"Snapshot [%s] contains data stream [%s] but custer does not have a matching index template. This will cause"
+ " rollover to fail until a matching index template is created",
snapshotInfo.snapshotId(),
dataStreamName
)
);
}

public void testUpdateDataStream() {
long now = System.currentTimeMillis();
String dataStreamName = "data-stream-1";
Expand Down
Loading