From 01becd3836a9c2755522c732b38c91ba5275f8eb Mon Sep 17 00:00:00 2001 From: Armin Braun Date: Wed, 12 Dec 2018 17:28:18 +0100 Subject: [PATCH] SETTINGS: Correctly Identify Noop Updates * We should compare the target value with the to be applied value before interpreting the update as a change * This speeds up the test failing in #36496 considerably by preventing state updates on noop setting updates --- .../common/settings/AbstractScopedSettings.java | 2 +- .../common/settings/ScopedSettingsTests.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/common/settings/AbstractScopedSettings.java b/server/src/main/java/org/elasticsearch/common/settings/AbstractScopedSettings.java index 0c134af47427a..752a9d5aba1eb 100644 --- a/server/src/main/java/org/elasticsearch/common/settings/AbstractScopedSettings.java +++ b/server/src/main/java/org/elasticsearch/common/settings/AbstractScopedSettings.java @@ -726,7 +726,7 @@ private boolean updateSettings(Settings toApply, Settings.Builder target, Settin validate(key, toApply, false); // we might not have a full picture here do to a dependency validation settingsBuilder.copy(key, toApply); updates.copy(key, toApply); - changed = true; + changed |= toApply.get(key).equals(target.get(key)) == false; } else { if (isFinalSetting(key)) { throw new IllegalArgumentException("final " + type + " setting [" + key + "], not updateable"); diff --git a/server/src/test/java/org/elasticsearch/common/settings/ScopedSettingsTests.java b/server/src/test/java/org/elasticsearch/common/settings/ScopedSettingsTests.java index 1846e180ad6f9..81060ee10360e 100644 --- a/server/src/test/java/org/elasticsearch/common/settings/ScopedSettingsTests.java +++ b/server/src/test/java/org/elasticsearch/common/settings/ScopedSettingsTests.java @@ -136,6 +136,17 @@ public void testResetSettingWithIPValidator() { assertEquals(1, currentSettings.size()); } + public void testNoopSettingsUpdate() { + String value = "192.168.0.1,127.0.0.1"; + String setting = "index.routing.allocation.require._ip"; + Settings currentSettings = Settings.builder().put(setting, value) + .build(); + Settings updates = Settings.builder().put(setting, value).build(); + IndexScopedSettings settings = new IndexScopedSettings(currentSettings, + new HashSet<>(Collections.singletonList(IndexMetaData.INDEX_ROUTING_REQUIRE_GROUP_SETTING))); + assertFalse(settings.updateSettings(updates, Settings.builder().put(currentSettings), Settings.builder(), "")); + } + public void testAddConsumer() { Setting testSetting = Setting.intSetting("foo.bar", 1, Property.Dynamic, Property.NodeScope); Setting testSetting2 = Setting.intSetting("foo.bar.baz", 1, Property.Dynamic, Property.NodeScope);