Skip to content

Commit f203c2b

Browse files
committed
Import replicated closed dangling indices (#50649)
Dangling replicated closed indices are not imported properly (they miss their routing table when imported).
1 parent b1ff74f commit f203c2b

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ public Builder addAsRecovery(IndexMetaData indexMetaData) {
510510
}
511511

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

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

Lines changed: 3 additions & 1 deletion
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

Lines changed: 6 additions & 0 deletions
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)