Allow resetting settings that use and IP validator (#24713)
The IP validator doesn't expect a null value for a setting that causes NPEs if a user tries to reset a setting that uses this validator. Closes #24709
This commit is contained in:
parent
77762fcbb0
commit
65218fea6d
|
@ -47,6 +47,9 @@ public class DiscoveryNodeFilters {
|
||||||
Map<String, String> settingsMap = settings.getAsMap();
|
Map<String, String> settingsMap = settings.getAsMap();
|
||||||
for (Map.Entry<String, String> entry : settingsMap.entrySet()) {
|
for (Map.Entry<String, String> entry : settingsMap.entrySet()) {
|
||||||
String propertyKey = entry.getKey();
|
String propertyKey = entry.getKey();
|
||||||
|
if (entry.getValue() == null) {
|
||||||
|
continue; // this setting gets reset
|
||||||
|
}
|
||||||
if ("_ip".equals(propertyKey) || "_host_ip".equals(propertyKey) || "_publish_ip".equals(propertyKey)) {
|
if ("_ip".equals(propertyKey) || "_host_ip".equals(propertyKey) || "_publish_ip".equals(propertyKey)) {
|
||||||
for (String value : Strings.tokenizeToStringArray(entry.getValue(), ",")) {
|
for (String value : Strings.tokenizeToStringArray(entry.getValue(), ",")) {
|
||||||
if (InetAddresses.isInetAddress(value) == false) {
|
if (InetAddresses.isInetAddress(value) == false) {
|
||||||
|
|
|
@ -103,6 +103,30 @@ public class ScopedSettingsTests extends ESTestCase {
|
||||||
assertNull(target.build().getAsInt("archived.foo.bar", null));
|
assertNull(target.build().getAsInt("archived.foo.bar", null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testResetSettingWithIPValidator() {
|
||||||
|
Settings currentSettings = Settings.builder().put("index.routing.allocation.require._ip", "192.168.0.1,127.0.0.1")
|
||||||
|
.put("index.some.dyn.setting", 1)
|
||||||
|
.build();
|
||||||
|
Setting<Integer> dynamicSetting = Setting.intSetting("index.some.dyn.setting", 1, Property.Dynamic, Property.IndexScope);
|
||||||
|
|
||||||
|
IndexScopedSettings settings = new IndexScopedSettings(currentSettings,
|
||||||
|
new HashSet<>(Arrays.asList(dynamicSetting, IndexMetaData.INDEX_ROUTING_REQUIRE_GROUP_SETTING)));
|
||||||
|
Settings s = IndexMetaData.INDEX_ROUTING_REQUIRE_GROUP_SETTING.get(currentSettings);
|
||||||
|
assertEquals(1, s.size());
|
||||||
|
assertEquals("192.168.0.1,127.0.0.1", s.get("_ip"));
|
||||||
|
Settings.Builder builder = Settings.builder();
|
||||||
|
Settings updates = Settings.builder().putNull("index.routing.allocation.require._ip")
|
||||||
|
.put("index.some.dyn.setting", 1).build();
|
||||||
|
settings.validate(updates);
|
||||||
|
settings.updateDynamicSettings(updates,
|
||||||
|
Settings.builder().put(currentSettings), builder, "node");
|
||||||
|
currentSettings = builder.build();
|
||||||
|
s = IndexMetaData.INDEX_ROUTING_REQUIRE_GROUP_SETTING.get(currentSettings);
|
||||||
|
assertEquals(0, s.size());
|
||||||
|
assertEquals(1, dynamicSetting.get(currentSettings).intValue());
|
||||||
|
assertEquals(1, currentSettings.size());
|
||||||
|
}
|
||||||
|
|
||||||
public void testAddConsumer() {
|
public void testAddConsumer() {
|
||||||
Setting<Integer> testSetting = Setting.intSetting("foo.bar", 1, Property.Dynamic, Property.NodeScope);
|
Setting<Integer> testSetting = Setting.intSetting("foo.bar", 1, Property.Dynamic, Property.NodeScope);
|
||||||
Setting<Integer> testSetting2 = Setting.intSetting("foo.bar.baz", 1, Property.Dynamic, Property.NodeScope);
|
Setting<Integer> testSetting2 = Setting.intSetting("foo.bar.baz", 1, Property.Dynamic, Property.NodeScope);
|
||||||
|
|
Loading…
Reference in New Issue