Skip to content

Commit 40801af

Browse files
authored
Import replicated closed dangling indices (#50649)
Dangling replicated closed indices are not imported properly (they miss their routing table when imported).
1 parent 5bf0685 commit 40801af

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

server/src/main/java/org/elasticsearch/cluster/routing/RoutingTable.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ public Builder addAsRecovery(IndexMetaData indexMetaData) {
511511
}
512512

513513
public Builder addAsFromDangling(IndexMetaData indexMetaData) {
514-
if (indexMetaData.getState() == IndexMetaData.State.OPEN) {
514+
if (indexMetaData.getState() == IndexMetaData.State.OPEN || isIndexVerifiedBeforeClosed(indexMetaData)) {
515515
IndexRoutingTable.Builder indexRoutingBuilder = new IndexRoutingTable.Builder(indexMetaData.getIndex())
516516
.initializeAsFromDangling(indexMetaData);
517517
add(indexRoutingBuilder);

server/src/main/java/org/elasticsearch/gateway/LocalAllocateDangledIndices.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import java.util.Arrays;
5252
import java.util.Collection;
5353

54+
import static org.elasticsearch.cluster.metadata.MetaDataIndexStateService.isIndexVerifiedBeforeClosed;
55+
5456
public class LocalAllocateDangledIndices {
5557

5658
private static final Logger logger = LogManager.getLogger(LocalAllocateDangledIndices.class);
@@ -149,7 +151,7 @@ public ClusterState execute(ClusterState currentState) {
149151
}
150152
metaData.put(upgradedIndexMetaData, false);
151153
blocks.addBlocks(upgradedIndexMetaData);
152-
if (upgradedIndexMetaData.getState() == IndexMetaData.State.OPEN) {
154+
if (upgradedIndexMetaData.getState() == IndexMetaData.State.OPEN || isIndexVerifiedBeforeClosed(indexMetaData)) {
153155
routingTableBuilder.addAsFromDangling(upgradedIndexMetaData);
154156
}
155157
sb.append("[").append(upgradedIndexMetaData.getIndex()).append("/").append(upgradedIndexMetaData.getState())

server/src/test/java/org/elasticsearch/indices/recovery/DanglingIndicesIT.java

+6
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ public void testDanglingIndicesAreRecoveredWhenSettingIsEnabled() throws Excepti
5353

5454
createIndex(INDEX_NAME, Settings.builder().put("number_of_replicas", 2).build());
5555

56+
if (randomBoolean()) {
57+
client().admin().indices().prepareClose(INDEX_NAME).get();
58+
}
59+
ensureGreen(INDEX_NAME);
60+
5661
// Restart node, deleting the index in its absence, so that there is a dangling index to recover
5762
internalCluster().restartRandomDataNode(new InternalTestCluster.RestartCallback() {
5863

@@ -64,6 +69,7 @@ public Settings onNodeStopped(String nodeName) throws Exception {
6469
});
6570

6671
assertBusy(() -> assertTrue("Expected dangling index " + INDEX_NAME + " to be recovered", indexExists(INDEX_NAME)));
72+
ensureGreen(INDEX_NAME);
6773
}
6874

6975
/**

0 commit comments

Comments
 (0)