diff --git a/server/src/main/java/org/elasticsearch/snapshots/SnapshotsService.java b/server/src/main/java/org/elasticsearch/snapshots/SnapshotsService.java index 6e17a6fa971f0..10d270e8ceffa 100644 --- a/server/src/main/java/org/elasticsearch/snapshots/SnapshotsService.java +++ b/server/src/main/java/org/elasticsearch/snapshots/SnapshotsService.java @@ -744,8 +744,6 @@ private static Metadata metadataForSnapshot(SnapshotsInProgress.Entry snapshot, for (Index index : dataStream.getIndices()) { final String indexName = index.getName(); if (builder.get(indexName) == null || indicesInSnapshot.contains(indexName) == false) { - assert snapshot.partial() : "Data stream [" + dataStreamName + - "] is missing index [" + index + "] but snapshot was not partial."; missingIndex = true; break; } @@ -1300,9 +1298,8 @@ private void finalizeSnapshotEntry(SnapshotsInProgress.Entry entry, Metadata met final SnapshotInfo snapshotInfo = new SnapshotInfo( snapshot.getSnapshotId(), finalIndices, - entry.partial() ? entry.dataStreams().stream() - .filter(metaForSnapshot.dataStreams()::containsKey) - .collect(Collectors.toList()) : entry.dataStreams(), + entry.dataStreams().stream().filter(metaForSnapshot.dataStreams()::containsKey) + .collect(Collectors.toList()), entry.partial() ? onlySuccessfulFeatureStates(entry, finalIndices) : entry.featureStates(), failure, threadPool.absoluteTimeInMillis(), diff --git a/x-pack/plugin/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamsSnapshotsIT.java b/x-pack/plugin/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamsSnapshotsIT.java index 967cc9b09c526..4726d12187a2a 100644 --- a/x-pack/plugin/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamsSnapshotsIT.java +++ b/x-pack/plugin/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamsSnapshotsIT.java @@ -710,4 +710,22 @@ public void testSnapshotDSDuringRolloverAndDeleteOldIndex() throws Exception { assertEquals(restoreSnapshotResponse.successfulShards(), restoreSnapshotResponse.totalShards()); assertEquals(restoreSnapshotResponse.failedShards(), 0); } + + public void testExcludeDSFromSnapshotWhenExcludingItsIndices() { + final String snapshot = "test-snapshot"; + final String indexWithoutDataStream = "test-idx-no-ds"; + createIndexWithContent(indexWithoutDataStream); + final SnapshotInfo snapshotInfo = createSnapshot(REPO, snapshot, List.of("*", "-.*")); + assertThat(snapshotInfo.dataStreams(), empty()); + assertAcked(client.admin().indices().prepareDelete(indexWithoutDataStream)); + RestoreInfo restoreInfo = client.admin() + .cluster() + .prepareRestoreSnapshot(REPO, snapshot) + .setWaitForCompletion(true) + .setRestoreGlobalState(randomBoolean()) + .get() + .getRestoreInfo(); + assertThat(restoreInfo.failedShards(), is(0)); + assertThat(restoreInfo.successfulShards(), is(1)); + } }