|
@@ -10,7 +10,9 @@ import org.elasticsearch.ResourceNotFoundException;
|
|
|
import org.elasticsearch.action.ActionFuture;
|
|
|
import org.elasticsearch.action.DocWriteRequest;
|
|
|
import org.elasticsearch.action.DocWriteResponse;
|
|
|
+import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotRequest;
|
|
|
import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotResponse;
|
|
|
+import org.elasticsearch.action.admin.cluster.snapshots.restore.RestoreSnapshotRequest;
|
|
|
import org.elasticsearch.action.admin.cluster.snapshots.restore.RestoreSnapshotResponse;
|
|
|
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
|
|
|
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest.AliasActions;
|
|
@@ -74,6 +76,7 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
|
|
|
private Client client;
|
|
|
|
|
|
private String dsBackingIndexName;
|
|
|
+ private String otherDsBackingIndexName;
|
|
|
private String ds2BackingIndexName;
|
|
|
private String id;
|
|
|
|
|
@@ -103,6 +106,7 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
|
|
|
GetDataStreamAction.Request getDataStreamRequest = new GetDataStreamAction.Request(new String[] { "*" });
|
|
|
GetDataStreamAction.Response getDataStreamResponse = client.execute(GetDataStreamAction.INSTANCE, getDataStreamRequest).actionGet();
|
|
|
dsBackingIndexName = getDataStreamResponse.getDataStreams().get(0).getDataStream().getIndices().get(0).getName();
|
|
|
+ otherDsBackingIndexName = getDataStreamResponse.getDataStreams().get(1).getDataStream().getIndices().get(0).getName();
|
|
|
// Will be used in some tests, to test renaming while restoring a snapshot:
|
|
|
ds2BackingIndexName = dsBackingIndexName.replace("-ds-", "-ds2-");
|
|
|
|
|
@@ -112,7 +116,7 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
|
|
|
|
|
|
IndicesAliasesRequest aliasesRequest = new IndicesAliasesRequest();
|
|
|
aliasesRequest.addAliasAction(new AliasActions(AliasActions.Type.ADD).alias("my-alias").index("ds"));
|
|
|
- aliasesRequest.addAliasAction(new AliasActions(AliasActions.Type.ADD).alias("my-alias").index("other-ds"));
|
|
|
+ aliasesRequest.addAliasAction(new AliasActions(AliasActions.Type.ADD).alias("my-alias").index("other-ds").writeIndex(true));
|
|
|
assertAcked(client.admin().indices().aliases(aliasesRequest).actionGet());
|
|
|
}
|
|
|
|
|
@@ -171,8 +175,10 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().keySet(), containsInAnyOrder("ds", "other-ds"));
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().get("ds").size(), equalTo(1));
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getName(), equalTo("my-alias"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getWriteDataStream(), equalTo("other-ds"));
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").size(), equalTo(1));
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getName(), equalTo("my-alias"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getWriteDataStream(), equalTo("other-ds"));
|
|
|
}
|
|
|
|
|
|
public void testSnapshotAndRestoreAllDataStreamsInPlace() throws Exception {
|
|
@@ -216,11 +222,10 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
|
|
|
List<Index> backingIndices = ds.getDataStreams().get(0).getDataStream().getIndices();
|
|
|
assertThat(backingIndices.stream().map(Index::getName).collect(Collectors.toList()), contains(dsBackingIndexName));
|
|
|
backingIndices = ds.getDataStreams().get(1).getDataStream().getIndices();
|
|
|
- String expectedBackingIndexName = DataStream.getDefaultBackingIndexName("other-ds", 1);
|
|
|
- assertThat(backingIndices.stream().map(Index::getName).collect(Collectors.toList()), contains(expectedBackingIndexName));
|
|
|
+ assertThat(backingIndices.stream().map(Index::getName).collect(Collectors.toList()), contains(otherDsBackingIndexName));
|
|
|
}
|
|
|
|
|
|
- public void testSnapshotAndRestoreInPlace() throws Exception {
|
|
|
+ public void testSnapshotAndRestoreInPlace() {
|
|
|
CreateSnapshotResponse createSnapshotResponse = client.admin()
|
|
|
.cluster()
|
|
|
.prepareCreateSnapshot(REPO, SNAPSHOT)
|
|
@@ -278,32 +283,110 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
|
|
|
assertThat(rolloverResponse.getNewIndex(), equalTo(DataStream.getDefaultBackingIndexName("ds", 3)));
|
|
|
}
|
|
|
|
|
|
- public void testSnapshotAndRestoreAll() throws Exception {
|
|
|
- CreateSnapshotResponse createSnapshotResponse = client.admin()
|
|
|
- .cluster()
|
|
|
- .prepareCreateSnapshot(REPO, SNAPSHOT)
|
|
|
- .setWaitForCompletion(true)
|
|
|
- .setIndices("ds")
|
|
|
- .setIncludeGlobalState(false)
|
|
|
+ public void testSnapshotAndRestoreAllIncludeSpecificDataStream() throws Exception {
|
|
|
+ IndexResponse indexResponse = client.prepareIndex("other-ds")
|
|
|
+ .setOpType(DocWriteRequest.OpType.CREATE)
|
|
|
+ .setSource(DOCUMENT_SOURCE)
|
|
|
.get();
|
|
|
+ assertEquals(DocWriteResponse.Result.CREATED, indexResponse.getResult());
|
|
|
+ String id2 = indexResponse.getId();
|
|
|
+
|
|
|
+ String id;
|
|
|
+ String dataStreamToSnapshot;
|
|
|
+ String backingIndexName;
|
|
|
+ if (randomBoolean()) {
|
|
|
+ dataStreamToSnapshot = "ds";
|
|
|
+ id = this.id;
|
|
|
+ backingIndexName = this.dsBackingIndexName;
|
|
|
+ } else {
|
|
|
+ dataStreamToSnapshot = "other-ds";
|
|
|
+ id = id2;
|
|
|
+ backingIndexName = this.otherDsBackingIndexName;
|
|
|
+ }
|
|
|
+ boolean filterDuringSnapshotting = randomBoolean();
|
|
|
+
|
|
|
+ CreateSnapshotRequest createSnapshotRequest = new CreateSnapshotRequest(REPO, SNAPSHOT);
|
|
|
+ createSnapshotRequest.waitForCompletion(true);
|
|
|
+ if (filterDuringSnapshotting) {
|
|
|
+ createSnapshotRequest.indices(dataStreamToSnapshot);
|
|
|
+ }
|
|
|
+ createSnapshotRequest.includeGlobalState(false);
|
|
|
+ CreateSnapshotResponse createSnapshotResponse = client.admin().cluster().createSnapshot(createSnapshotRequest).actionGet();
|
|
|
|
|
|
RestStatus status = createSnapshotResponse.getSnapshotInfo().status();
|
|
|
assertEquals(RestStatus.OK, status);
|
|
|
|
|
|
- assertEquals(Collections.singletonList(dsBackingIndexName), getSnapshot(REPO, SNAPSHOT).indices());
|
|
|
+ if (filterDuringSnapshotting) {
|
|
|
+ assertThat(getSnapshot(REPO, SNAPSHOT).indices(), containsInAnyOrder(backingIndexName));
|
|
|
+ } else {
|
|
|
+ assertThat(getSnapshot(REPO, SNAPSHOT).indices(), containsInAnyOrder(dsBackingIndexName, otherDsBackingIndexName));
|
|
|
+ }
|
|
|
|
|
|
assertAcked(client.execute(DeleteDataStreamAction.INSTANCE, new DeleteDataStreamAction.Request(new String[] { "*" })).get());
|
|
|
assertAcked(client.admin().indices().prepareDelete("*").setIndicesOptions(IndicesOptions.LENIENT_EXPAND_OPEN_CLOSED_HIDDEN));
|
|
|
|
|
|
- RestoreSnapshotResponse restoreSnapshotResponse = client.admin()
|
|
|
- .cluster()
|
|
|
- .prepareRestoreSnapshot(REPO, SNAPSHOT)
|
|
|
- .setWaitForCompletion(true)
|
|
|
- .setRestoreGlobalState(true)
|
|
|
- .get();
|
|
|
+ RestoreSnapshotRequest restoreSnapshotRequest = new RestoreSnapshotRequest(REPO, SNAPSHOT);
|
|
|
+ restoreSnapshotRequest.waitForCompletion(true);
|
|
|
+ restoreSnapshotRequest.includeGlobalState(true);
|
|
|
+ if (filterDuringSnapshotting == false) {
|
|
|
+ restoreSnapshotRequest.indices(dataStreamToSnapshot);
|
|
|
+ }
|
|
|
+ RestoreSnapshotResponse restoreSnapshotResponse = client.admin().cluster().restoreSnapshot(restoreSnapshotRequest).actionGet();
|
|
|
|
|
|
assertEquals(1, restoreSnapshotResponse.getRestoreInfo().successfulShards());
|
|
|
|
|
|
+ assertEquals(DOCUMENT_SOURCE, client.prepareGet(backingIndexName, id).get().getSourceAsMap());
|
|
|
+ SearchHit[] hits = client.prepareSearch(backingIndexName).get().getHits().getHits();
|
|
|
+ assertEquals(1, hits.length);
|
|
|
+ assertEquals(DOCUMENT_SOURCE, hits[0].getSourceAsMap());
|
|
|
+
|
|
|
+ GetDataStreamAction.Response ds = client.execute(
|
|
|
+ GetDataStreamAction.INSTANCE,
|
|
|
+ new GetDataStreamAction.Request(new String[] { dataStreamToSnapshot })
|
|
|
+ ).get();
|
|
|
+ assertEquals(1, ds.getDataStreams().size());
|
|
|
+ assertEquals(1, ds.getDataStreams().get(0).getDataStream().getIndices().size());
|
|
|
+ assertEquals(backingIndexName, ds.getDataStreams().get(0).getDataStream().getIndices().get(0).getName());
|
|
|
+
|
|
|
+ GetAliasesResponse getAliasesResponse = client.admin().indices().getAliases(new GetAliasesRequest("my-alias")).actionGet();
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().keySet(), contains(dataStreamToSnapshot));
|
|
|
+ assertThat(
|
|
|
+ getAliasesResponse.getDataStreamAliases().get(dataStreamToSnapshot),
|
|
|
+ equalTo(
|
|
|
+ List.of(
|
|
|
+ new DataStreamAlias(
|
|
|
+ "my-alias",
|
|
|
+ List.of(dataStreamToSnapshot),
|
|
|
+ "other-ds".equals(dataStreamToSnapshot) ? "other-ds" : null
|
|
|
+ )
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+
|
|
|
+ DeleteDataStreamAction.Request r = new DeleteDataStreamAction.Request(new String[] { dataStreamToSnapshot });
|
|
|
+ assertAcked(client().execute(DeleteDataStreamAction.INSTANCE, r).get());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testSnapshotAndRestoreReplaceAll() throws Exception {
|
|
|
+ CreateSnapshotRequest createSnapshotRequest = new CreateSnapshotRequest(REPO, SNAPSHOT);
|
|
|
+ createSnapshotRequest.waitForCompletion(true);
|
|
|
+ createSnapshotRequest.includeGlobalState(false);
|
|
|
+ CreateSnapshotResponse createSnapshotResponse = client.admin().cluster().createSnapshot(createSnapshotRequest).actionGet();
|
|
|
+
|
|
|
+ RestStatus status = createSnapshotResponse.getSnapshotInfo().status();
|
|
|
+ assertEquals(RestStatus.OK, status);
|
|
|
+ assertThat(getSnapshot(REPO, SNAPSHOT).indices(), containsInAnyOrder(dsBackingIndexName, otherDsBackingIndexName));
|
|
|
+
|
|
|
+ assertAcked(client.execute(DeleteDataStreamAction.INSTANCE, new DeleteDataStreamAction.Request(new String[] { "*" })).get());
|
|
|
+ assertAcked(client.admin().indices().prepareDelete("*").setIndicesOptions(IndicesOptions.LENIENT_EXPAND_OPEN_CLOSED_HIDDEN));
|
|
|
+
|
|
|
+ RestoreSnapshotRequest restoreSnapshotRequest = new RestoreSnapshotRequest(REPO, SNAPSHOT);
|
|
|
+ restoreSnapshotRequest.waitForCompletion(true);
|
|
|
+ restoreSnapshotRequest.includeGlobalState(true);
|
|
|
+ RestoreSnapshotResponse restoreSnapshotResponse = client.admin().cluster().restoreSnapshot(restoreSnapshotRequest).actionGet();
|
|
|
+
|
|
|
+ assertEquals(2, restoreSnapshotResponse.getRestoreInfo().successfulShards());
|
|
|
+
|
|
|
assertEquals(DOCUMENT_SOURCE, client.prepareGet(dsBackingIndexName, id).get().getSourceAsMap());
|
|
|
SearchHit[] hits = client.prepareSearch("ds").get().getHits().getHits();
|
|
|
assertEquals(1, hits.length);
|
|
@@ -311,15 +394,75 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
|
|
|
|
|
|
GetDataStreamAction.Response ds = client.execute(
|
|
|
GetDataStreamAction.INSTANCE,
|
|
|
- new GetDataStreamAction.Request(new String[] { "ds" })
|
|
|
+ new GetDataStreamAction.Request(new String[] { "*" })
|
|
|
).get();
|
|
|
- assertEquals(1, ds.getDataStreams().size());
|
|
|
+ assertEquals(2, ds.getDataStreams().size());
|
|
|
+ assertThat(
|
|
|
+ ds.getDataStreams().stream().map(i -> i.getDataStream().getName()).collect(Collectors.toList()),
|
|
|
+ containsInAnyOrder("ds", "other-ds")
|
|
|
+ );
|
|
|
+
|
|
|
+ GetAliasesResponse getAliasesResponse = client.admin().indices().getAliases(new GetAliasesRequest("my-alias")).actionGet();
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().keySet(), containsInAnyOrder("ds", "other-ds"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").size(), equalTo(1));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getName(), equalTo("my-alias"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getDataStreams(), containsInAnyOrder("ds", "other-ds"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getWriteDataStream(), equalTo("other-ds"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").size(), equalTo(1));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getName(), equalTo("my-alias"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getDataStreams(), containsInAnyOrder("ds", "other-ds"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getWriteDataStream(), equalTo("other-ds"));
|
|
|
+
|
|
|
+ DeleteDataStreamAction.Request r = new DeleteDataStreamAction.Request(new String[] { "*" });
|
|
|
+ assertAcked(client().execute(DeleteDataStreamAction.INSTANCE, r).get());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testSnapshotAndRestoreAll() throws Exception {
|
|
|
+ CreateSnapshotRequest createSnapshotRequest = new CreateSnapshotRequest(REPO, SNAPSHOT);
|
|
|
+ createSnapshotRequest.waitForCompletion(true);
|
|
|
+ createSnapshotRequest.includeGlobalState(false);
|
|
|
+ CreateSnapshotResponse createSnapshotResponse = client.admin().cluster().createSnapshot(createSnapshotRequest).actionGet();
|
|
|
+
|
|
|
+ RestStatus status = createSnapshotResponse.getSnapshotInfo().status();
|
|
|
+ assertEquals(RestStatus.OK, status);
|
|
|
+ assertThat(getSnapshot(REPO, SNAPSHOT).indices(), containsInAnyOrder(dsBackingIndexName, otherDsBackingIndexName));
|
|
|
+
|
|
|
+ assertAcked(client.execute(DeleteDataStreamAction.INSTANCE, new DeleteDataStreamAction.Request(new String[] { "*" })).get());
|
|
|
+ assertAcked(client.admin().indices().prepareDelete("*").setIndicesOptions(IndicesOptions.LENIENT_EXPAND_OPEN_CLOSED_HIDDEN));
|
|
|
+
|
|
|
+ RestoreSnapshotRequest restoreSnapshotRequest = new RestoreSnapshotRequest(REPO, SNAPSHOT);
|
|
|
+ restoreSnapshotRequest.waitForCompletion(true);
|
|
|
+ restoreSnapshotRequest.includeGlobalState(true);
|
|
|
+ RestoreSnapshotResponse restoreSnapshotResponse = client.admin().cluster().restoreSnapshot(restoreSnapshotRequest).actionGet();
|
|
|
+ assertEquals(2, restoreSnapshotResponse.getRestoreInfo().successfulShards());
|
|
|
+
|
|
|
+ assertEquals(DOCUMENT_SOURCE, client.prepareGet(dsBackingIndexName, id).get().getSourceAsMap());
|
|
|
+ SearchHit[] hits = client.prepareSearch("ds").get().getHits().getHits();
|
|
|
+ assertEquals(1, hits.length);
|
|
|
+ assertEquals(DOCUMENT_SOURCE, hits[0].getSourceAsMap());
|
|
|
+
|
|
|
+ GetDataStreamAction.Response ds = client.execute(
|
|
|
+ GetDataStreamAction.INSTANCE,
|
|
|
+ new GetDataStreamAction.Request(new String[] { "*" })
|
|
|
+ ).get();
|
|
|
+ assertEquals(2, ds.getDataStreams().size());
|
|
|
assertEquals(1, ds.getDataStreams().get(0).getDataStream().getIndices().size());
|
|
|
assertEquals(dsBackingIndexName, ds.getDataStreams().get(0).getDataStream().getIndices().get(0).getName());
|
|
|
+ assertEquals(1, ds.getDataStreams().get(1).getDataStream().getIndices().size());
|
|
|
+ assertEquals(otherDsBackingIndexName, ds.getDataStreams().get(1).getDataStream().getIndices().get(0).getName());
|
|
|
|
|
|
GetAliasesResponse getAliasesResponse = client.admin().indices().getAliases(new GetAliasesRequest("my-alias")).actionGet();
|
|
|
- assertThat(getAliasesResponse.getDataStreamAliases().keySet(), containsInAnyOrder("ds"));
|
|
|
- assertThat(getAliasesResponse.getDataStreamAliases().get("ds"), equalTo(List.of(new DataStreamAlias("my-alias", List.of("ds")))));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().keySet(), containsInAnyOrder("ds", "other-ds"));
|
|
|
+
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").size(), equalTo(1));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getName(), equalTo("my-alias"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getWriteDataStream(), equalTo("other-ds"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getDataStreams(), containsInAnyOrder("ds", "other-ds"));
|
|
|
+
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").size(), equalTo(1));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getName(), equalTo("my-alias"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getWriteDataStream(), equalTo("other-ds"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getDataStreams(), containsInAnyOrder("ds", "other-ds"));
|
|
|
|
|
|
assertAcked(client().execute(DeleteDataStreamAction.INSTANCE, new DeleteDataStreamAction.Request(new String[] { "ds" })).get());
|
|
|
}
|
|
@@ -366,8 +509,10 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().get("ds2").get(0).getName(), equalTo("my-alias"));
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().get("ds").size(), equalTo(1));
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getName(), equalTo("my-alias"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getWriteDataStream(), equalTo("other-ds"));
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").size(), equalTo(1));
|
|
|
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getName(), equalTo("my-alias"));
|
|
|
+ assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getWriteDataStream(), equalTo("other-ds"));
|
|
|
}
|
|
|
|
|
|
public void testBackingIndexIsNotRenamedWhenRestoringDataStream() {
|