Skip to content

Commit 1fd5510

Browse files
williamrandolphgwbrown
authored andcommitted
Strip blocks from settings for reindex targets (elastic#80887)
When migrating system features, we copy settings from old indices into the new indices we create before reindexing. However, if we happen to copy a write block, this causes the reindexing to fail. Here, we strip the index block settings before applying settings to new indices. Fixes
1 parent ca8cc1f commit 1fd5510

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

modules/reindex/src/internalClusterTest/java/org/elasticsearch/migration/FeatureMigrationIT.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,30 @@ public void testMigrateInternalManagedSystemIndex() throws Exception {
243243
);
244244
}
245245

246+
public void testMigrateIndexWithWriteBlock() throws Exception {
247+
createSystemIndexForDescriptor(INTERNAL_UNMANAGED);
248+
249+
String indexName = Optional.ofNullable(INTERNAL_UNMANAGED.getPrimaryIndex())
250+
.orElse(INTERNAL_UNMANAGED.getIndexPattern().replace("*", "old"));
251+
client().admin().indices().prepareUpdateSettings(indexName).setSettings(Settings.builder().put("index.blocks.write", true)).get();
252+
253+
TestPlugin.preMigrationHook.set((state) -> Collections.emptyMap());
254+
TestPlugin.postMigrationHook.set((state, metadata) -> {});
255+
256+
ensureGreen();
257+
258+
client().execute(PostFeatureUpgradeAction.INSTANCE, new PostFeatureUpgradeRequest()).get();
259+
260+
assertBusy(() -> {
261+
GetFeatureUpgradeStatusResponse statusResp = client().execute(
262+
GetFeatureUpgradeStatusAction.INSTANCE,
263+
new GetFeatureUpgradeStatusRequest()
264+
).get();
265+
logger.info(Strings.toString(statusResp));
266+
assertThat(statusResp.getUpgradeStatus(), equalTo(GetFeatureUpgradeStatusResponse.UpgradeStatus.NO_MIGRATION_NEEDED));
267+
});
268+
}
269+
246270
public void assertIndexHasCorrectProperties(
247271
Metadata metadata,
248272
String indexName,

server/src/main/java/org/elasticsearch/upgrades/SystemIndexMigrator.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import java.util.LinkedList;
4848
import java.util.List;
4949
import java.util.Map;
50+
import java.util.Objects;
5051
import java.util.Optional;
5152
import java.util.Queue;
5253
import java.util.concurrent.atomic.AtomicReference;
@@ -459,9 +460,16 @@ private void createIndex(SystemIndexMigrationInfo migrationInfo, ActionListener<
459460
migrationInfo.getNextIndexName()
460461
);
461462

463+
Settings.Builder settingsBuilder = Settings.builder();
464+
if (Objects.nonNull(migrationInfo.getSettings())) {
465+
settingsBuilder.put(migrationInfo.getSettings());
466+
settingsBuilder.remove("index.blocks.write");
467+
settingsBuilder.remove("index.blocks.read");
468+
settingsBuilder.remove("index.blocks.metadata");
469+
}
462470
createRequest.waitForActiveShards(ActiveShardCount.ALL)
463471
.mappings(Collections.singletonMap("_doc", migrationInfo.getMappings()))
464-
.settings(migrationInfo.getSettings() == null ? Settings.EMPTY : migrationInfo.getSettings());
472+
.settings(migrationInfo.getSettings() == null ? Settings.EMPTY : settingsBuilder.build());
465473
metadataCreateIndexService.createIndex(createRequest, listener);
466474
}
467475

0 commit comments

Comments
 (0)