diff --git a/docs/changelog/126077.yaml b/docs/changelog/126077.yaml new file mode 100644 index 0000000000000..ffb98d71ba630 --- /dev/null +++ b/docs/changelog/126077.yaml @@ -0,0 +1,6 @@ +pr: 126077 +summary: Preventing `ConcurrentModificationException` when updating settings for more + than one index +area: Indices APIs +type: bug +issues: [] diff --git a/server/src/internalClusterTest/java/org/elasticsearch/cluster/metadata/MetadataUpdateSettingsServiceIT.java b/server/src/internalClusterTest/java/org/elasticsearch/cluster/metadata/MetadataUpdateSettingsServiceIT.java index c1e68040e075b..9d486abeafc4f 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/cluster/metadata/MetadataUpdateSettingsServiceIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/cluster/metadata/MetadataUpdateSettingsServiceIT.java @@ -39,7 +39,8 @@ public void testThatNonDynamicSettingChangesTakeEffect() throws Exception { * This test makes sure that when non-dynamic settings are updated that they actually take effect (as opposed to just being set * in the cluster state). */ - createIndex("test", Settings.EMPTY); + createIndex("test-1", Settings.EMPTY); + createIndex("test-2", Settings.EMPTY); MetadataUpdateSettingsService metadataUpdateSettingsService = internalCluster().getCurrentMasterNodeInstance( MetadataUpdateSettingsService.class ); diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/MetadataUpdateSettingsService.java b/server/src/main/java/org/elasticsearch/cluster/metadata/MetadataUpdateSettingsService.java index c11fa06d83c4d..49429bbb83404 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/MetadataUpdateSettingsService.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/MetadataUpdateSettingsService.java @@ -219,7 +219,7 @@ ClusterState execute(ClusterState currentState) { allocationService.getShardRoutingRoleStrategy(), currentState.routingTable() ); - for (Index index : openIndices) { + for (Index index : new HashSet<>(openIndices)) { // We only want to take on the expense of reopening all shards for an index if the setting is really changing Settings existingSettings = currentState.getMetadata().index(index).getSettings(); boolean needToReopenIndex = false;