From 2193a8e4010a65eb584111ef42f4485a3b4c0002 Mon Sep 17 00:00:00 2001 From: Martijn van Groningen Date: Wed, 13 Feb 2013 13:10:56 +0100 Subject: [PATCH] Let the update index settings action fail if non dynamic settings are changed for open indices. Closes #2647 --- .../MetaDataUpdateSettingsService.java | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java b/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java index e9301e19a4d9e..4f727dc92d7de 100644 --- a/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java +++ b/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java @@ -158,6 +158,27 @@ public ClusterState execute(ClusterState currentState) { RoutingTable.Builder routingTableBuilder = RoutingTable.builder().routingTable(currentState.routingTable()); MetaData.Builder metaDataBuilder = MetaData.newMetaDataBuilder().metaData(currentState.metaData()); + // allow to change any settings to a close index, and only allow dynamic settings to be changed + // on an open index + Set openIndices = Sets.newHashSet(); + Set closeIndices = Sets.newHashSet(); + for (String index : actualIndices) { + if (currentState.metaData().index(index).state() == IndexMetaData.State.OPEN) { + openIndices.add(index); + } else { + closeIndices.add(index); + } + } + + if (!removedSettings.isEmpty() && !openIndices.isEmpty()) { + listener.onFailure(new ElasticSearchIllegalArgumentException(String.format( + "Can't update non dynamic settings[%s] for open indices[%s]", + removedSettings, + openIndices + ))); + return currentState; + } + int updatedNumberOfReplicas = openSettings.getAsInt(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, -1); if (updatedNumberOfReplicas != -1) { routingTableBuilder.updateNumberOfReplicas(updatedNumberOfReplicas, actualIndices); @@ -209,23 +230,8 @@ public ClusterState execute(ClusterState currentState) { } } - // allow to change any settings to a close index, and only allow dynamic settings to be changed - // on an open index - Set openIndices = Sets.newHashSet(); - Set closeIndices = Sets.newHashSet(); - for (String index : actualIndices) { - if (currentState.metaData().index(index).state() == IndexMetaData.State.OPEN) { - openIndices.add(index); - } else { - closeIndices.add(index); - } - } - if (!openIndices.isEmpty()) { String[] indices = openIndices.toArray(new String[openIndices.size()]); - if (!removedSettings.isEmpty()) { - logger.warn("{} ignoring non dynamic index level settings for open indices: {}", indices, removedSettings); - } metaDataBuilder.updateSettings(openSettings, indices); }