Fix propagating the default value for script settings
Fixes an issue where the value for the `script.engine.<lang>.inline` settings would be _set_ properly, but would not accurately be reflected in the `include_defaults` output. Adds a test to ensure the default raw setting is now correct. Resolves #20159
This commit is contained in:
parent
287cb00474
commit
3fbfb3e7e7
|
@ -97,9 +97,25 @@ public class ScriptSettings {
|
||||||
}
|
}
|
||||||
final boolean defaultIfNothingSet = defaultLangAndType;
|
final boolean defaultIfNothingSet = defaultLangAndType;
|
||||||
|
|
||||||
|
Function<Settings, String> defaultLangAndTypeFn = settings -> {
|
||||||
|
final Setting<Boolean> globalTypeSetting = scriptTypeSettingMap.get(scriptType);
|
||||||
|
final Setting<Boolean> langAndTypeSetting = Setting.boolSetting(ScriptModes.getGlobalKey(language, scriptType),
|
||||||
|
defaultIfNothingSet, Property.NodeScope);
|
||||||
|
|
||||||
|
if (langAndTypeSetting.exists(settings)) {
|
||||||
|
// fine-grained e.g. script.engine.groovy.inline
|
||||||
|
return langAndTypeSetting.get(settings).toString();
|
||||||
|
} else if (globalTypeSetting.exists(settings)) {
|
||||||
|
// global type - script.inline
|
||||||
|
return globalTypeSetting.get(settings).toString();
|
||||||
|
} else {
|
||||||
|
return Boolean.toString(defaultIfNothingSet);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Setting for something like "script.engine.groovy.inline"
|
// Setting for something like "script.engine.groovy.inline"
|
||||||
final Setting<Boolean> langAndTypeSetting = Setting.boolSetting(ScriptModes.getGlobalKey(language, scriptType),
|
final Setting<Boolean> langAndTypeSetting = Setting.boolSetting(ScriptModes.getGlobalKey(language, scriptType),
|
||||||
defaultLangAndType, Property.NodeScope);
|
defaultLangAndTypeFn, Property.NodeScope);
|
||||||
scriptModeSettings.add(langAndTypeSetting);
|
scriptModeSettings.add(langAndTypeSetting);
|
||||||
|
|
||||||
for (ScriptContext scriptContext : scriptContextRegistry.scriptContexts()) {
|
for (ScriptContext scriptContext : scriptContextRegistry.scriptContexts()) {
|
||||||
|
|
|
@ -20,11 +20,13 @@
|
||||||
package org.elasticsearch.script;
|
package org.elasticsearch.script;
|
||||||
|
|
||||||
import org.elasticsearch.common.Nullable;
|
import org.elasticsearch.common.Nullable;
|
||||||
|
import org.elasticsearch.common.settings.Setting;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.search.lookup.SearchLookup;
|
import org.elasticsearch.search.lookup.SearchLookup;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
|
@ -64,6 +66,22 @@ public class ScriptSettingsTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testSettingsAreProperlyPropogated() {
|
||||||
|
ScriptEngineRegistry scriptEngineRegistry =
|
||||||
|
new ScriptEngineRegistry(Collections.singletonList(new CustomScriptEngineService()));
|
||||||
|
ScriptContextRegistry scriptContextRegistry = new ScriptContextRegistry(Collections.emptyList());
|
||||||
|
ScriptSettings scriptSettings = new ScriptSettings(scriptEngineRegistry, scriptContextRegistry);
|
||||||
|
boolean enabled = randomBoolean();
|
||||||
|
Settings s = Settings.builder().put("script.inline", enabled).build();
|
||||||
|
for (Iterator<Setting<Boolean>> iter = scriptSettings.getScriptLanguageSettings().iterator(); iter.hasNext();) {
|
||||||
|
Setting<Boolean> setting = iter.next();
|
||||||
|
if (setting.getKey().endsWith(".inline")) {
|
||||||
|
assertThat("inline settings should have propagated", setting.get(s), equalTo(enabled));
|
||||||
|
assertThat(setting.getDefaultRaw(s), equalTo(Boolean.toString(enabled)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class CustomScriptEngineService implements ScriptEngineService {
|
private static class CustomScriptEngineService implements ScriptEngineService {
|
||||||
|
|
||||||
public static final String NAME = "custom";
|
public static final String NAME = "custom";
|
||||||
|
|
Loading…
Reference in New Issue