Skip to content

Commit 6b2322f

Browse files
authored
Also rename write data stream alias during a restore. (#73588)
Rename during a restore should also rename write data stream in data stream alias. Relates to #66163
1 parent 3cb2863 commit 6b2322f

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

server/src/main/java/org/elasticsearch/snapshots/RestoreService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1198,7 +1198,11 @@ private void applyDataStreamRestores(ClusterState currentState, Metadata.Builder
11981198
List<String> renamedDataStreams = alias.getDataStreams().stream()
11991199
.map(s -> s.replaceAll(request.renamePattern(), request.renameReplacement()))
12001200
.collect(Collectors.toList());
1201-
return new DataStreamAlias(alias.getName(), renamedDataStreams, alias.getWriteDataStream());
1201+
String writeDataStream = alias.getWriteDataStream();
1202+
if (writeDataStream != null) {
1203+
writeDataStream = writeDataStream.replaceAll(request.renamePattern(), request.renameReplacement());
1204+
}
1205+
return new DataStreamAlias(alias.getName(), renamedDataStreams, writeDataStream);
12021206
} else {
12031207
return alias;
12041208
}

x-pack/plugin/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamsSnapshotsIT.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
7878
private String dsBackingIndexName;
7979
private String otherDsBackingIndexName;
8080
private String ds2BackingIndexName;
81+
private String otherDs2BackingIndexName;
8182
private String id;
8283

8384
@Override
@@ -109,6 +110,7 @@ public void setup() throws Exception {
109110
otherDsBackingIndexName = getDataStreamResponse.getDataStreams().get(1).getDataStream().getIndices().get(0).getName();
110111
// Will be used in some tests, to test renaming while restoring a snapshot:
111112
ds2BackingIndexName = dsBackingIndexName.replace("-ds-", "-ds2-");
113+
otherDs2BackingIndexName = otherDsBackingIndexName.replace("-other-ds-", "-other-ds2-");
112114

113115
IndexResponse indexResponse = client.prepareIndex("ds").setOpType(DocWriteRequest.OpType.CREATE).setSource(DOCUMENT_SOURCE).get();
114116
assertEquals(DocWriteResponse.Result.CREATED, indexResponse.getResult());
@@ -515,6 +517,48 @@ public void testRename() throws Exception {
515517
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getWriteDataStream(), equalTo("other-ds"));
516518
}
517519

520+
public void testRenameWriteDataStream() throws Exception {
521+
CreateSnapshotResponse createSnapshotResponse = client.admin()
522+
.cluster()
523+
.prepareCreateSnapshot(REPO, SNAPSHOT)
524+
.setWaitForCompletion(true)
525+
.setIndices("other-ds")
526+
.setIncludeGlobalState(false)
527+
.get();
528+
529+
RestStatus status = createSnapshotResponse.getSnapshotInfo().status();
530+
assertEquals(RestStatus.OK, status);
531+
532+
client.admin()
533+
.cluster()
534+
.prepareRestoreSnapshot(REPO, SNAPSHOT)
535+
.setWaitForCompletion(true)
536+
.setIndices("other-ds")
537+
.setRenamePattern("other-ds")
538+
.setRenameReplacement("other-ds2")
539+
.get();
540+
541+
GetDataStreamAction.Response ds = client.execute(
542+
GetDataStreamAction.INSTANCE,
543+
new GetDataStreamAction.Request(new String[] { "other-ds2" })
544+
).get();
545+
assertEquals(1, ds.getDataStreams().size());
546+
assertEquals(1, ds.getDataStreams().get(0).getDataStream().getIndices().size());
547+
assertEquals(otherDs2BackingIndexName, ds.getDataStreams().get(0).getDataStream().getIndices().get(0).getName());
548+
549+
GetAliasesResponse getAliasesResponse = client.admin().indices().getAliases(new GetAliasesRequest("my-alias")).actionGet();
550+
assertThat(getAliasesResponse.getDataStreamAliases().keySet(), containsInAnyOrder("ds", "other-ds", "other-ds2"));
551+
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds2").size(), equalTo(1));
552+
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds2").get(0).getName(), equalTo("my-alias"));
553+
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds2").get(0).getWriteDataStream(), equalTo("other-ds2"));
554+
assertThat(getAliasesResponse.getDataStreamAliases().get("ds").size(), equalTo(1));
555+
assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getName(), equalTo("my-alias"));
556+
assertThat(getAliasesResponse.getDataStreamAliases().get("ds").get(0).getWriteDataStream(), equalTo("other-ds2"));
557+
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").size(), equalTo(1));
558+
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getName(), equalTo("my-alias"));
559+
assertThat(getAliasesResponse.getDataStreamAliases().get("other-ds").get(0).getWriteDataStream(), equalTo("other-ds2"));
560+
}
561+
518562
public void testBackingIndexIsNotRenamedWhenRestoringDataStream() {
519563
CreateSnapshotResponse createSnapshotResponse = client.admin()
520564
.cluster()

0 commit comments

Comments
 (0)