Skip to content

Commit 43e6cac

Browse files
Strip blocks from settings for reindex targets (#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 #80654
1 parent 1adb59c commit 43e6cac

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-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
@@ -242,6 +242,30 @@ public void testMigrateInternalManagedSystemIndex() throws Exception {
242242
);
243243
}
244244

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

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,9 +459,16 @@ private void createIndex(SystemIndexMigrationInfo migrationInfo, ActionListener<
459459
migrationInfo.getNextIndexName()
460460
);
461461

462+
Settings.Builder settingsBuilder = Settings.builder();
463+
if (Objects.nonNull(migrationInfo.getSettings())) {
464+
settingsBuilder.put(migrationInfo.getSettings());
465+
settingsBuilder.remove("index.blocks.write");
466+
settingsBuilder.remove("index.blocks.read");
467+
settingsBuilder.remove("index.blocks.metadata");
468+
}
462469
createRequest.waitForActiveShards(ActiveShardCount.ALL)
463470
.mappings(migrationInfo.getMappings())
464-
.settings(Objects.requireNonNullElse(migrationInfo.getSettings(), Settings.EMPTY));
471+
.settings(Objects.requireNonNullElse(settingsBuilder.build(), Settings.EMPTY));
465472
metadataCreateIndexService.createIndex(createRequest, listener);
466473
}
467474

0 commit comments

Comments
 (0)