Make Painless the default scripting language.

Closes elastic/elasticsearch#3124

Original commit: elastic/x-pack-elasticsearch@7e458c07a6
This commit is contained in:
Jack Conradson 2016-08-22 17:39:19 -07:00
parent 5936e8da29
commit feefd070ef
1 changed files with 12 additions and 10 deletions

View File

@ -15,6 +15,7 @@ import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.script.MockScriptPlugin; import org.elasticsearch.script.MockScriptPlugin;
import org.elasticsearch.script.Script; import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptService; import org.elasticsearch.script.ScriptService;
import org.elasticsearch.script.ScriptService.ScriptType;
import org.elasticsearch.xpack.XPackPlugin; import org.elasticsearch.xpack.XPackPlugin;
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest; import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase; import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
@ -70,7 +71,7 @@ public class TransformIntegrationTests extends AbstractWatcherIntegrationTestCas
// When using the MockScriptPlugin we can map File scripts to inline scripts: // When using the MockScriptPlugin we can map File scripts to inline scripts:
// the name of the file script is used in test method while the source of the file script // the name of the file script is used in test method while the source of the file script
// must match a predefined script from CustomScriptPlugin.pluginScripts() method // must match a predefined script from CustomScriptPlugin.pluginScripts() method
Files.write(scripts.resolve("my-script.groovy"), "return [key3 : ctx.payload.key1 + ctx.payload.key2]".getBytes("UTF-8")); Files.write(scripts.resolve("my-script.painless"), "['key3' : ctx.payload.key1 + ctx.payload.key2]".getBytes("UTF-8"));
} catch (IOException ex) { } catch (IOException ex) {
throw new RuntimeException("Failed to create scripts", ex); throw new RuntimeException("Failed to create scripts", ex);
} }
@ -90,13 +91,13 @@ public class TransformIntegrationTests extends AbstractWatcherIntegrationTestCas
protected Map<String, Function<Map<String, Object>, Object>> pluginScripts() { protected Map<String, Function<Map<String, Object>, Object>> pluginScripts() {
Map<String, Function<Map<String, Object>, Object>> scripts = new HashMap<>(); Map<String, Function<Map<String, Object>, Object>> scripts = new HashMap<>();
scripts.put("return [key3 : ctx.payload.key1 + ctx.payload.key2]", vars -> { scripts.put("['key3' : ctx.payload.key1 + ctx.payload.key2]", vars -> {
int key1 = (int) XContentMapValues.extractValue("ctx.payload.key1", vars); int key1 = (int) XContentMapValues.extractValue("ctx.payload.key1", vars);
int key2 = (int) XContentMapValues.extractValue("ctx.payload.key2", vars); int key2 = (int) XContentMapValues.extractValue("ctx.payload.key2", vars);
return singletonMap("key3", key1 + key2); return singletonMap("key3", key1 + key2);
}); });
scripts.put("return [key4 : ctx.payload.key3 + 10]", vars -> { scripts.put("['key4' : ctx.payload.key3 + 10]", vars -> {
int key3 = (int) XContentMapValues.extractValue("ctx.payload.key3", vars); int key3 = (int) XContentMapValues.extractValue("ctx.payload.key3", vars);
return singletonMap("key4", key3 + 10); return singletonMap("key4", key3 + 10);
}); });
@ -114,18 +115,18 @@ public class TransformIntegrationTests extends AbstractWatcherIntegrationTestCas
final Script script; final Script script;
if (randomBoolean()) { if (randomBoolean()) {
logger.info("testing script transform with an inline script"); logger.info("testing script transform with an inline script");
script = new Script("return [key3 : ctx.payload.key1 + ctx.payload.key2]"); script = new Script("['key3' : ctx.payload.key1 + ctx.payload.key2]");
} else if (randomBoolean()) { } else if (randomBoolean()) {
logger.info("testing script transform with an indexed script"); logger.info("testing script transform with an indexed script");
assertAcked(client().admin().cluster().preparePutStoredScript() assertAcked(client().admin().cluster().preparePutStoredScript()
.setId("my-script") .setId("my-script")
.setScriptLang("groovy") .setScriptLang("painless")
.setSource(new BytesArray("{\"script\" : \"return [key3 : ctx.payload.key1 + ctx.payload.key2]\"}")) .setSource(new BytesArray("{\"script\" : \"['key3' : ctx.payload.key1 + ctx.payload.key2]\"}"))
.get()); .get());
script = new Script("my-script", ScriptService.ScriptType.STORED, "groovy", null); script = new Script("my-script", ScriptService.ScriptType.STORED, "painless", null);
} else { } else {
logger.info("testing script transform with a file script"); logger.info("testing script transform with a file script");
script = new Script("my-script", ScriptService.ScriptType.FILE, "groovy", null); script = new Script("my-script", ScriptService.ScriptType.FILE, "painless", null);
} }
// put a watch that has watch level transform: // put a watch that has watch level transform:
@ -219,8 +220,9 @@ public class TransformIntegrationTests extends AbstractWatcherIntegrationTestCas
} }
public void testChainTransform() throws Exception { public void testChainTransform() throws Exception {
Script script1 = new Script("return [key3 : ctx.payload.key1 + ctx.payload.key2]"); Script script1 = new Script("['key3' : ctx.payload.key1 + ctx.payload.key2]");
Script script2 = new Script("return [key4 : ctx.payload.key3 + 10]"); Script script2 = new Script("['key4' : ctx.payload.key3 + 10]");
// put a watch that has watch level transform: // put a watch that has watch level transform:
PutWatchResponse putWatchResponse = watcherClient().preparePutWatch("_id1") PutWatchResponse putWatchResponse = watcherClient().preparePutWatch("_id1")
.setSource(watchBuilder() .setSource(watchBuilder()