Skip to content

Commit 8eab1fe

Browse files
authored
Scripting: Make contexts available to ScriptEngine construction (elastic#24896)
This commit adds collection of all contexts to the parameters of getScriptEngine. This will allow script engines like painless to precache extra information about the contexts.
1 parent 9a11869 commit 8eab1fe

File tree

10 files changed

+27
-11
lines changed

10 files changed

+27
-11
lines changed

core/src/main/java/org/elasticsearch/plugins/ScriptPlugin.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
*/
1919
package org.elasticsearch.plugins;
2020

21+
import java.util.Collection;
2122
import java.util.Collections;
2223
import java.util.List;
24+
import java.util.Map;
2325

2426
import org.elasticsearch.common.settings.Settings;
2527
import org.elasticsearch.script.ScriptContext;
@@ -31,9 +33,11 @@
3133
public interface ScriptPlugin {
3234

3335
/**
34-
* Returns a {@link ScriptEngine} instance or <code>null</code> if this plugin doesn't add a new script engine
36+
* Returns a {@link ScriptEngine} instance or <code>null</code> if this plugin doesn't add a new script engine.
37+
* @param settings Node settings
38+
* @param contexts The contexts that {@link ScriptEngine#compile(String, String, ScriptContext, Map)} may be called with
3539
*/
36-
default ScriptEngine getScriptEngine(Settings settings) {
40+
default ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>> contexts) {
3741
return null;
3842
}
3943

core/src/main/java/org/elasticsearch/script/ScriptModule.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ public ScriptModule(Settings settings, List<ScriptPlugin> scriptPlugins) {
6161
throw new IllegalArgumentException("Context name [" + context.name + "] defined twice");
6262
}
6363
}
64-
ScriptEngine engine = plugin.getScriptEngine(settings);
64+
}
65+
for (ScriptPlugin plugin : scriptPlugins) {
66+
ScriptEngine engine = plugin.getScriptEngine(settings, contexts.values());
6567
if (engine != null) {
6668
ScriptEngine existing = engines.put(engine.getType(), engine);
6769
if (existing != null) {

core/src/test/java/org/elasticsearch/search/functionscore/ExplainableScriptIT.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public class ExplainableScriptIT extends ESIntegTestCase {
7070

7171
public static class ExplainableScriptPlugin extends Plugin implements ScriptPlugin {
7272
@Override
73-
public ScriptEngine getScriptEngine(Settings settings) {
73+
public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>> contexts) {
7474
return new ScriptEngine() {
7575
@Override
7676
public String getType() {

core/src/test/java/org/elasticsearch/search/suggest/SuggestSearchIT.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1009,7 +1009,7 @@ protected Collection<Class<? extends Plugin>> nodePlugins() {
10091009

10101010
public static class DummyTemplatePlugin extends Plugin implements ScriptPlugin {
10111011
@Override
1012-
public ScriptEngine getScriptEngine(Settings settings) {
1012+
public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>> contexts) {
10131013
return new DummyTemplateScriptEngine();
10141014
}
10151015
}

modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionPlugin.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,18 @@
1919

2020
package org.elasticsearch.script.expression;
2121

22+
import java.util.Collection;
23+
2224
import org.elasticsearch.common.settings.Settings;
2325
import org.elasticsearch.plugins.Plugin;
2426
import org.elasticsearch.plugins.ScriptPlugin;
27+
import org.elasticsearch.script.ScriptContext;
2528
import org.elasticsearch.script.ScriptEngine;
2629

2730
public class ExpressionPlugin extends Plugin implements ScriptPlugin {
2831

2932
@Override
30-
public ScriptEngine getScriptEngine(Settings settings) {
33+
public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>> contexts) {
3134
return new ExpressionScriptEngine(settings);
3235
}
3336
}

modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,18 @@
3333
import org.elasticsearch.plugins.SearchPlugin;
3434
import org.elasticsearch.rest.RestController;
3535
import org.elasticsearch.rest.RestHandler;
36+
import org.elasticsearch.script.ScriptContext;
3637
import org.elasticsearch.script.ScriptEngine;
3738

3839
import java.util.Arrays;
40+
import java.util.Collection;
3941
import java.util.List;
4042
import java.util.function.Supplier;
4143

4244
public class MustachePlugin extends Plugin implements ScriptPlugin, ActionPlugin, SearchPlugin {
4345

4446
@Override
45-
public ScriptEngine getScriptEngine(Settings settings) {
47+
public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>>contexts) {
4648
return new MustacheScriptEngine();
4749
}
4850

modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@
2424
import org.elasticsearch.common.settings.Settings;
2525
import org.elasticsearch.plugins.Plugin;
2626
import org.elasticsearch.plugins.ScriptPlugin;
27+
import org.elasticsearch.script.ScriptContext;
2728
import org.elasticsearch.script.ScriptEngine;
2829

2930
import java.util.Arrays;
31+
import java.util.Collection;
3032
import java.util.List;
3133

3234
/**
@@ -40,7 +42,7 @@ public final class PainlessPlugin extends Plugin implements ScriptPlugin {
4042
}
4143

4244
@Override
43-
public ScriptEngine getScriptEngine(Settings settings) {
45+
public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>> contexts) {
4446
return new PainlessScriptEngine(settings);
4547
}
4648

plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import java.io.IOException;
2323
import java.io.UncheckedIOException;
24+
import java.util.Collection;
2425
import java.util.Map;
2526
import java.util.function.Function;
2627

@@ -45,7 +46,7 @@
4546
public class ExpertScriptPlugin extends Plugin implements ScriptPlugin {
4647

4748
@Override
48-
public ScriptEngine getScriptEngine(Settings settings) {
49+
public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>> contexts) {
4950
return new MyExpertScriptEngine();
5051
}
5152

test/framework/src/main/java/org/elasticsearch/script/MockScriptPlugin.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.elasticsearch.plugins.Plugin;
2424
import org.elasticsearch.plugins.ScriptPlugin;
2525

26+
import java.util.Collection;
2627
import java.util.Map;
2728
import java.util.function.Function;
2829

@@ -34,7 +35,7 @@ public abstract class MockScriptPlugin extends Plugin implements ScriptPlugin {
3435
public static final String NAME = MockScriptEngine.NAME;
3536

3637
@Override
37-
public ScriptEngine getScriptEngine(Settings settings) {
38+
public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>> contexts) {
3839
return new MockScriptEngine(pluginScriptLang(), pluginScripts());
3940
}
4041

test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
import org.elasticsearch.plugins.ScriptPlugin;
9595
import org.elasticsearch.script.MockScriptEngine;
9696
import org.elasticsearch.script.Script;
97+
import org.elasticsearch.script.ScriptContext;
9798
import org.elasticsearch.script.ScriptEngine;
9899
import org.elasticsearch.script.ScriptModule;
99100
import org.elasticsearch.script.ScriptService;
@@ -1195,7 +1196,7 @@ public static TestAnalysis createTestAnalysis(IndexSettings indexSettings, Setti
11951196
public static ScriptModule newTestScriptModule() {
11961197
return new ScriptModule(Settings.EMPTY, singletonList(new ScriptPlugin() {
11971198
@Override
1198-
public ScriptEngine getScriptEngine(Settings settings) {
1199+
public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<?>> contexts) {
11991200
return new MockScriptEngine(MockScriptEngine.NAME, Collections.singletonMap("1", script -> "1"));
12001201
}
12011202
}));

0 commit comments

Comments
 (0)