diff options
Diffstat (limited to 'core/src/main/java/org/elasticsearch/common/settings/SettingsModule.java')
-rw-r--r-- | core/src/main/java/org/elasticsearch/common/settings/SettingsModule.java | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/core/src/main/java/org/elasticsearch/common/settings/SettingsModule.java b/core/src/main/java/org/elasticsearch/common/settings/SettingsModule.java index 8298c0c127..f95cc1f6f6 100644 --- a/core/src/main/java/org/elasticsearch/common/settings/SettingsModule.java +++ b/core/src/main/java/org/elasticsearch/common/settings/SettingsModule.java @@ -24,6 +24,7 @@ import org.elasticsearch.common.inject.AbstractModule; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.function.Predicate; /** * A module that binds the provided settings to the {@link Settings} interface. @@ -54,16 +55,13 @@ public class SettingsModule extends AbstractModule { final ClusterSettings clusterSettings = new ClusterSettings(settings, new HashSet<>(this.clusterSettings.values())); // by now we are fully configured, lets check node level settings for unregistered index settings indexScopedSettings.validate(settings.filter(IndexScopedSettings.INDEX_SETTINGS_KEY_PREDICATE)); - // we can't call this method yet since we have not all node level settings registered. - // yet we can validate the ones we have registered to not have invalid values. this is better than nothing - // and progress over perfection and we fail as soon as possible. - // clusterSettings.validate(settings.filter(IndexScopedSettings.INDEX_SETTINGS_KEY_PREDICATE.negate())); - for (Map.Entry<String, String> entry : settings.filter(IndexScopedSettings.INDEX_SETTINGS_KEY_PREDICATE.negate()).getAsMap().entrySet()) { - if (clusterSettings.get(entry.getKey()) != null) { - clusterSettings.validate(entry.getKey(), settings); - } + Predicate<String> noIndexSettingPredicate = IndexScopedSettings.INDEX_SETTINGS_KEY_PREDICATE.negate(); + Predicate<String> noTribePredicate = (s) -> s.startsWith("tribe.") == false; + for (Map.Entry<String, String> entry : settings.filter(noTribePredicate.and(noIndexSettingPredicate)).getAsMap().entrySet()) { + validateClusterSetting(clusterSettings, entry.getKey(), settings); } + validateTribeSettings(settings, clusterSettings); bind(Settings.class).toInstance(settings); bind(SettingsFilter.class).toInstance(settingsFilter); @@ -88,4 +86,25 @@ public class SettingsModule extends AbstractModule { } } + public void validateTribeSettings(Settings settings, ClusterSettings clusterSettings) { + Map<String, Settings> groups = settings.getGroups("tribe.", true); + for (Map.Entry<String, Settings> tribeSettings : groups.entrySet()) { + for (Map.Entry<String, String> entry : tribeSettings.getValue().getAsMap().entrySet()) { + validateClusterSetting(clusterSettings, entry.getKey(), tribeSettings.getValue()); + } + } + } + + private final void validateClusterSetting(ClusterSettings clusterSettings, String key, Settings settings) { + // we can't call this method yet since we have not all node level settings registered. + // yet we can validate the ones we have registered to not have invalid values. this is better than nothing + // and progress over perfection and we fail as soon as possible. + // clusterSettings.validate(settings.filter(IndexScopedSettings.INDEX_SETTINGS_KEY_PREDICATE.negate())); + if (clusterSettings.get(key) != null) { + clusterSettings.validate(key, settings); + } else if (AbstractScopedSettings.isValidKey(key) == false) { + throw new IllegalArgumentException("illegal settings key: [" + key + "]"); + } + } + } |