From ccfe2a4cfb2af13a5f3883cc02f036ead5ec92ad Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Tue, 11 Oct 2022 17:09:51 -0400 Subject: [PATCH 1/5] Move mov_fn agg to module This continues to populate the `aggregations` module with it's first pipeline aggregation and it's first custom script context. Relates to #90283 --- modules/aggregations/build.gradle | 9 ++++ .../src/main/java/module-info.java | 5 ++ .../AggregationsPainlessExtension.java | 35 ++++++++++++ .../aggregations/AggregationsPlugin.java | 23 +++++++- .../MovFnPipelineAggregationBuilder.java | 4 +- .../pipeline/MovFnPipelineAggregator.java | 5 +- .../pipeline/MovingFunctionScript.java | 2 +- ...asticsearch.painless.spi.PainlessExtension | 9 ++++ .../moving_function_whitelist.txt} | 2 +- .../pipeline/MovFnAggregatorTests.java | 54 +++++++++++++++---- ...eAggregationBuilderSerializationTests.java | 11 +++- ...acency_matrix.yml => adjacency_matrix.yml} | 0 .../test/aggregations/moving_fn.yml} | 47 ++++++++++++++++ .../painless/spi/WhitelistLoader.java | 1 + .../test/search.aggregation/250_moving_fn.yml | 47 ---------------- .../aggregations/pipeline/SerialDiffIT.java | 1 + .../elasticsearch/script/ScriptModule.java | 2 - .../elasticsearch/search/SearchModule.java | 8 --- .../PipelineAggregatorBuilders.java | 5 -- .../pipeline/CumulativeSumTests.java | 1 + .../pipeline/DerivativeTests.java | 1 + .../pipeline/SerialDifferenceTests.java | 1 + .../script/MockScriptEngine.java | 11 ---- .../PipelineAggregationHelperTests.java | 5 +- 24 files changed, 195 insertions(+), 94 deletions(-) create mode 100644 modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java rename {server/src/main/java/org/elasticsearch/search => modules/aggregations/src/main/java/org/elasticsearch}/aggregations/pipeline/MovFnPipelineAggregationBuilder.java (97%) rename {server/src/main/java/org/elasticsearch/search => modules/aggregations/src/main/java/org/elasticsearch}/aggregations/pipeline/MovFnPipelineAggregator.java (95%) rename {server/src/main/java/org/elasticsearch/search => modules/aggregations/src/main/java/org/elasticsearch}/aggregations/pipeline/MovingFunctionScript.java (95%) create mode 100644 modules/aggregations/src/main/resources/META-INF/services/org.elasticsearch.painless.spi.PainlessExtension rename modules/{lang-painless/src/main/resources/org/elasticsearch/painless/org.elasticsearch.script.moving_function.txt => aggregations/src/main/resources/org/elasticsearch/aggregations/moving_function_whitelist.txt} (97%) rename server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MovFnAggrgatorTests.java => modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnAggregatorTests.java (78%) rename {server/src/test/java/org/elasticsearch/search => modules/aggregations/src/test/java/org/elasticsearch}/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java (88%) rename modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/{70_adjacency_matrix.yml => adjacency_matrix.yml} (100%) rename modules/{lang-painless/src/yamlRestTest/resources/rest-api-spec/test/painless/70_moving_fn_agg.yml => aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/moving_fn.yml} (95%) delete mode 100644 rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search.aggregation/250_moving_fn.yml rename {server/src/test/java/org/elasticsearch/search/aggregations/pipeline => test/framework/src/main/java/org/elasticsearch/search/aggregations}/PipelineAggregationHelperTests.java (96%) diff --git a/modules/aggregations/build.gradle b/modules/aggregations/build.gradle index 8fe127b28ea5e..a6ae19e813c43 100644 --- a/modules/aggregations/build.gradle +++ b/modules/aggregations/build.gradle @@ -12,6 +12,7 @@ apply plugin: 'elasticsearch.internal-cluster-test' esplugin { description 'Adds "built in" aggregations to Elasticsearch.' classname 'org.elasticsearch.aggregations.AggregationsPlugin' + extendedPlugins = ['lang-painless'] } restResources { @@ -19,3 +20,11 @@ restResources { include '_common', 'indices', 'cluster', 'index', 'search', 'nodes', 'bulk' } } + +testClusters.configureEach { + module ':modules:lang-painless' +} + +dependencies { + compileOnly(project(':modules:lang-painless:spi')) +} diff --git a/modules/aggregations/src/main/java/module-info.java b/modules/aggregations/src/main/java/module-info.java index b64b761fc90b3..89bffa9774933 100644 --- a/modules/aggregations/src/main/java/module-info.java +++ b/modules/aggregations/src/main/java/module-info.java @@ -8,10 +8,15 @@ module org.elasticsearch.aggs { requires org.elasticsearch.base; + requires org.elasticsearch.painless.spi; requires org.elasticsearch.server; requires org.elasticsearch.xcontent; requires org.apache.lucene.core; exports org.elasticsearch.aggregations.bucket; + exports org.elasticsearch.aggregations.pipeline; + opens org.elasticsearch.aggregations to org.elasticsearch.painless.spi; // whitelist resource access + + provides org.elasticsearch.painless.spi.PainlessExtension with org.elasticsearch.aggregations.AggregationsPainlessExtension; } diff --git a/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java new file mode 100644 index 0000000000000..288cc610ecd59 --- /dev/null +++ b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.aggregations; + +import org.elasticsearch.aggregations.pipeline.MovingFunctionScript; +import org.elasticsearch.painless.spi.PainlessExtension; +import org.elasticsearch.painless.spi.Whitelist; +import org.elasticsearch.painless.spi.WhitelistLoader; +import org.elasticsearch.script.ScriptContext; +import org.elasticsearch.search.aggregations.pipeline.MovingFunctions; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * Extends the painless whitelist for the {@link MovingFunctionScript} to include {@link MovingFunctions}. + */ +public class AggregationsPainlessExtension implements PainlessExtension { + private static final Whitelist MOVING_FUNCTION_WHITELIST = WhitelistLoader.loadFromResourceFiles( + AggregationsPainlessExtension.class, + "moving_function_whitelist.txt" + ); + + @Override + public Map, List> getContextWhitelists() { + return Collections.singletonMap(MovingFunctionScript.CONTEXT, Collections.singletonList(MOVING_FUNCTION_WHITELIST)); + } +} diff --git a/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPlugin.java b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPlugin.java index 8f7f2c7fc75b0..19249c8f60db0 100644 --- a/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPlugin.java +++ b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPlugin.java @@ -10,13 +10,16 @@ import org.elasticsearch.aggregations.bucket.AdjacencyMatrixAggregationBuilder; import org.elasticsearch.aggregations.bucket.InternalAdjacencyMatrix; +import org.elasticsearch.aggregations.pipeline.MovFnPipelineAggregationBuilder; +import org.elasticsearch.aggregations.pipeline.MovingFunctionScript; import org.elasticsearch.plugins.Plugin; +import org.elasticsearch.plugins.ScriptPlugin; import org.elasticsearch.plugins.SearchPlugin; +import org.elasticsearch.script.ScriptContext; import java.util.List; -public class AggregationsPlugin extends Plugin implements SearchPlugin { - +public class AggregationsPlugin extends Plugin implements SearchPlugin, ScriptPlugin { @Override public List getAggregations() { return List.of( @@ -27,4 +30,20 @@ public List getAggregations() { ).addResultReader(InternalAdjacencyMatrix::new) ); } + + @Override + public List getPipelineAggregations() { + return List.of( + new PipelineAggregationSpec( + MovFnPipelineAggregationBuilder.NAME, + MovFnPipelineAggregationBuilder::new, + MovFnPipelineAggregationBuilder.PARSER + ) + ); + } + + @Override + public List> getContexts() { + return List.of(MovingFunctionScript.CONTEXT); + } } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregationBuilder.java b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilder.java similarity index 97% rename from server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregationBuilder.java rename to modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilder.java index 1208e7661c81f..8c721ae2e1797 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregationBuilder.java +++ b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilder.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.search.aggregations.pipeline; +package org.elasticsearch.aggregations.pipeline; import org.elasticsearch.Version; import org.elasticsearch.common.Strings; @@ -14,7 +14,9 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.script.Script; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.pipeline.AbstractPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; +import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.xcontent.ConstructingObjectParser; import org.elasticsearch.xcontent.ObjectParser; import org.elasticsearch.xcontent.ParseField; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregator.java b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregator.java similarity index 95% rename from server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregator.java rename to modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregator.java index f4995762cc789..7431e806d96e4 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregator.java +++ b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregator.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.search.aggregations.pipeline; +package org.elasticsearch.aggregations.pipeline; import org.elasticsearch.script.Script; import org.elasticsearch.search.DocValueFormat; @@ -16,6 +16,9 @@ import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation; import org.elasticsearch.search.aggregations.bucket.histogram.HistogramFactory; +import org.elasticsearch.search.aggregations.pipeline.BucketHelpers; +import org.elasticsearch.search.aggregations.pipeline.InternalSimpleValue; +import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import java.util.ArrayList; import java.util.HashMap; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovingFunctionScript.java b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/MovingFunctionScript.java similarity index 95% rename from server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovingFunctionScript.java rename to modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/MovingFunctionScript.java index af9ef625e4808..2a6dc1107ad67 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovingFunctionScript.java +++ b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/MovingFunctionScript.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.search.aggregations.pipeline; +package org.elasticsearch.aggregations.pipeline; import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptFactory; diff --git a/modules/aggregations/src/main/resources/META-INF/services/org.elasticsearch.painless.spi.PainlessExtension b/modules/aggregations/src/main/resources/META-INF/services/org.elasticsearch.painless.spi.PainlessExtension new file mode 100644 index 0000000000000..49fffefd631dc --- /dev/null +++ b/modules/aggregations/src/main/resources/META-INF/services/org.elasticsearch.painless.spi.PainlessExtension @@ -0,0 +1,9 @@ +# +# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +# or more contributor license agreements. Licensed under the Elastic License +# 2.0 and the Server Side Public License, v 1; you may not use this file except +# in compliance with, at your election, the Elastic License 2.0 or the Server +# Side Public License, v 1. +# + +org.elasticsearch.aggregations.AggregationsPainlessExtension diff --git a/modules/lang-painless/src/main/resources/org/elasticsearch/painless/org.elasticsearch.script.moving_function.txt b/modules/aggregations/src/main/resources/org/elasticsearch/aggregations/moving_function_whitelist.txt similarity index 97% rename from modules/lang-painless/src/main/resources/org/elasticsearch/painless/org.elasticsearch.script.moving_function.txt rename to modules/aggregations/src/main/resources/org/elasticsearch/aggregations/moving_function_whitelist.txt index 634c47f738486..5ca85c5863127 100644 --- a/modules/lang-painless/src/main/resources/org/elasticsearch/painless/org.elasticsearch.script.moving_function.txt +++ b/modules/aggregations/src/main/resources/org/elasticsearch/aggregations/moving_function_whitelist.txt @@ -6,7 +6,7 @@ # Side Public License, v 1. # -# This file contains a whitelist for the Moving Function pipeline aggregator in core +# This file contains a whitelist for the Moving Function pipeline aggregator class org.elasticsearch.search.aggregations.pipeline.MovingFunctions { double max(double[]) diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MovFnAggrgatorTests.java b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnAggregatorTests.java similarity index 78% rename from server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MovFnAggrgatorTests.java rename to modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnAggregatorTests.java index 6c673cd837e39..acb30ca23ec8d 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MovFnAggrgatorTests.java +++ b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnAggregatorTests.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.search.aggregations.pipeline; +package org.elasticsearch.aggregations.pipeline; import org.apache.lucene.document.Document; import org.apache.lucene.document.LongPoint; @@ -24,10 +24,9 @@ import org.elasticsearch.index.mapper.DateFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.NumberFieldMapper; -import org.elasticsearch.script.MockScriptEngine; import org.elasticsearch.script.Script; +import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptEngine; -import org.elasticsearch.script.ScriptModule; import org.elasticsearch.script.ScriptService; import org.elasticsearch.script.ScriptType; import org.elasticsearch.search.aggregations.AggregatorTestCase; @@ -36,17 +35,20 @@ import org.elasticsearch.search.aggregations.bucket.histogram.Histogram; import org.elasticsearch.search.aggregations.bucket.histogram.InternalDateHistogram; import org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder; +import org.elasticsearch.search.aggregations.pipeline.InternalSimpleValue; +import org.elasticsearch.search.aggregations.pipeline.MovingFunctions; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Consumer; import static org.hamcrest.Matchers.equalTo; -public class MovFnAggrgatorTests extends AggregatorTestCase { +public class MovFnAggregatorTests extends AggregatorTestCase { private static final String DATE_FIELD = "date"; private static final String INSTANT_FIELD = "instant"; @@ -69,14 +71,44 @@ public class MovFnAggrgatorTests extends AggregatorTestCase { @Override protected ScriptService getMockScriptService() { - MockScriptEngine scriptEngine = new MockScriptEngine( - MockScriptEngine.NAME, - Collections.singletonMap("test", script -> MovingFunctions.max((double[]) script.get("_values"))), - Collections.emptyMap() - ); + ScriptEngine scriptEngine = new ScriptEngine() { + @Override + public String getType() { + return "test"; + } + + @Override + public FactoryType compile( + String name, + String code, + ScriptContext context, + Map params + ) { + if (getSupportedContexts().contains(context) == false) { + return null; + } + MovingFunctionScript.Factory factory = () -> new MovingFunctionScript() { + @Override + public double execute(Map params, double[] values) { + return MovingFunctions.max(values); + } + }; + return context.factoryClazz.cast(factory); + } + + @Override + public Set> getSupportedContexts() { + return Set.of(MovingFunctionScript.CONTEXT); + } + }; Map engines = Collections.singletonMap(scriptEngine.getType(), scriptEngine); - return new ScriptService(Settings.EMPTY, engines, ScriptModule.CORE_CONTEXTS, () -> 1L); + return new ScriptService( + Settings.EMPTY, + engines, + Map.of(MovingFunctionScript.CONTEXT.name, MovingFunctionScript.CONTEXT), + () -> 1L + ); } public void testMatchAllDocs() throws IOException { @@ -94,7 +126,7 @@ public void testWideWindow() throws IOException { } private void check(int shift, int window, List expected) throws IOException { - Script script = new Script(ScriptType.INLINE, MockScriptEngine.NAME, "test", Collections.emptyMap()); + Script script = new Script(ScriptType.INLINE, "test", "test", Collections.emptyMap()); MovFnPipelineAggregationBuilder builder = new MovFnPipelineAggregationBuilder("mov_fn", "avg", script, window); builder.setShift(shift); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java similarity index 88% rename from server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java rename to modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java index 8f432f420e1bd..07ec8deefb4ee 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java +++ b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java @@ -6,15 +6,19 @@ * Side Public License, v 1. */ -package org.elasticsearch.search.aggregations.pipeline; +package org.elasticsearch.aggregations.pipeline; +import org.elasticsearch.aggregations.AggregationsPlugin; +import org.elasticsearch.plugins.SearchPlugin; import org.elasticsearch.script.Script; import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.BasePipelineAggregationTestCase; +import org.elasticsearch.search.aggregations.PipelineAggregationHelperTests; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import java.io.IOException; import java.util.Collections; +import java.util.List; import static java.util.Collections.emptyList; import static java.util.Collections.emptyMap; @@ -22,6 +26,11 @@ import static org.hamcrest.Matchers.nullValue; public class MovFnPipelineAggregationBuilderSerializationTests extends BasePipelineAggregationTestCase { + @Override + protected List plugins() { + return List.of(new AggregationsPlugin()); + } + @Override protected MovFnPipelineAggregationBuilder createTestAggregatorFactory() { MovFnPipelineAggregationBuilder builder = new MovFnPipelineAggregationBuilder( diff --git a/modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/70_adjacency_matrix.yml b/modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/adjacency_matrix.yml similarity index 100% rename from modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/70_adjacency_matrix.yml rename to modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/adjacency_matrix.yml diff --git a/modules/lang-painless/src/yamlRestTest/resources/rest-api-spec/test/painless/70_moving_fn_agg.yml b/modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/moving_fn.yml similarity index 95% rename from modules/lang-painless/src/yamlRestTest/resources/rest-api-spec/test/painless/70_moving_fn_agg.yml rename to modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/moving_fn.yml index d2ff73ab16b1c..177bafaa07adf 100644 --- a/modules/lang-painless/src/yamlRestTest/resources/rest-api-spec/test/painless/70_moving_fn_agg.yml +++ b/modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/moving_fn.yml @@ -765,3 +765,50 @@ bad path: buckets_path: "missing" window: 2 script: "MovingFunctions.min(values)" + +--- +"Bad window": + + - skip: + version: " - 7.1.99" + reason: "calendar_interval added in 7.2" + + - do: + catch: /\[window\] must be a positive, non-zero integer\./ + search: + rest_total_hits_as_int: true + body: + size: 0 + aggs: + the_histo: + date_histogram: + field: "date" + calendar_interval: "1d" + aggs: + the_avg: + avg: + field: "value_field" + the_mov_fn: + moving_fn: + buckets_path: "the_avg" + window: -1 + script: "MovingFunctions.max(values)" + +--- +"Not under date_histo": + + - do: + catch: /moving_fn aggregation \[the_mov_fn\] must have a histogram, date_histogram or auto_date_histogram as parent but doesn't have a parent/ + search: + rest_total_hits_as_int: true + body: + size: 0 + aggs: + the_avg: + avg: + field: "value_field" + the_mov_fn: + moving_fn: + buckets_path: "the_avg" + window: 1 + script: "MovingFunctions.max(values)" diff --git a/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/WhitelistLoader.java b/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/WhitelistLoader.java index 4709d5adacb0f..0ad0ab5bf096c 100644 --- a/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/WhitelistLoader.java +++ b/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/WhitelistLoader.java @@ -150,6 +150,7 @@ public static Whitelist loadFromResourceFiles(Class resource, Map plugins) { SerialDiffPipelineAggregationBuilder::parse ) ); - registerPipelineAggregation( - new PipelineAggregationSpec( - MovFnPipelineAggregationBuilder.NAME, - MovFnPipelineAggregationBuilder::new, - MovFnPipelineAggregationBuilder.PARSER - ) - ); if (RestApiVersion.minimumSupported() == RestApiVersion.V_7) { registerPipelineAggregation( new PipelineAggregationSpec( diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/PipelineAggregatorBuilders.java b/server/src/main/java/org/elasticsearch/search/aggregations/PipelineAggregatorBuilders.java index 1409ec94009a5..e5988ced78516 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/PipelineAggregatorBuilders.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/PipelineAggregatorBuilders.java @@ -18,7 +18,6 @@ import org.elasticsearch.search.aggregations.pipeline.ExtendedStatsBucketPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.MaxBucketPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.MinBucketPipelineAggregationBuilder; -import org.elasticsearch.search.aggregations.pipeline.MovFnPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.PercentilesBucketPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.SerialDiffPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.StatsBucketPipelineAggregationBuilder; @@ -91,8 +90,4 @@ public static CumulativeSumPipelineAggregationBuilder cumulativeSum(String name, public static SerialDiffPipelineAggregationBuilder diff(String name, String bucketsPath) { return new SerialDiffPipelineAggregationBuilder(name, bucketsPath); } - - public static MovFnPipelineAggregationBuilder movingFunction(String name, Script script, String bucketsPaths, int window) { - return new MovFnPipelineAggregationBuilder(name, bucketsPaths, script, window); - } } diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/CumulativeSumTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/CumulativeSumTests.java index 21beed053efca..5a7fa6c4b4ec7 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/CumulativeSumTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/CumulativeSumTests.java @@ -10,6 +10,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.BasePipelineAggregationTestCase; +import org.elasticsearch.search.aggregations.PipelineAggregationHelperTests; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import java.io.IOException; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/DerivativeTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/DerivativeTests.java index 9de23d9f83722..90ff367666a0b 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/DerivativeTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/DerivativeTests.java @@ -11,6 +11,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.BasePipelineAggregationTestCase; import org.elasticsearch.search.aggregations.PipelineAggregationBuilder; +import org.elasticsearch.search.aggregations.PipelineAggregationHelperTests; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SerialDifferenceTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SerialDifferenceTests.java index db001a1a13c14..19ee2a91fd786 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SerialDifferenceTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SerialDifferenceTests.java @@ -11,6 +11,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.BasePipelineAggregationTestCase; import org.elasticsearch.search.aggregations.PipelineAggregationBuilder; +import org.elasticsearch.search.aggregations.PipelineAggregationHelperTests; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; diff --git a/test/framework/src/main/java/org/elasticsearch/script/MockScriptEngine.java b/test/framework/src/main/java/org/elasticsearch/script/MockScriptEngine.java index b1cc863835314..ea02011459784 100644 --- a/test/framework/src/main/java/org/elasticsearch/script/MockScriptEngine.java +++ b/test/framework/src/main/java/org/elasticsearch/script/MockScriptEngine.java @@ -20,7 +20,6 @@ import org.elasticsearch.index.similarity.ScriptedSimilarity.Field; import org.elasticsearch.index.similarity.ScriptedSimilarity.Query; import org.elasticsearch.index.similarity.ScriptedSimilarity.Term; -import org.elasticsearch.search.aggregations.pipeline.MovingFunctionScript; import org.elasticsearch.search.lookup.SearchLookup; import java.io.IOException; @@ -251,15 +250,6 @@ public String execute() { } else if (context.instanceClazz.equals(SimilarityWeightScript.class)) { SimilarityWeightScript.Factory factory = mockCompiled::createSimilarityWeightScript; return context.factoryClazz.cast(factory); - } else if (context.instanceClazz.equals(MovingFunctionScript.class)) { - MovingFunctionScript.Factory factory = () -> new MovingFunctionScript() { - @Override - public double execute(Map params1, double[] values) { - params1.put("_values", values); - return (double) script.apply(params1); - } - }; - return context.factoryClazz.cast(factory); } else if (context.instanceClazz.equals(ScoreScript.class)) { ScoreScript.Factory factory = new MockScoreScript(script); return context.factoryClazz.cast(factory); @@ -372,7 +362,6 @@ public Set> getSupportedContexts() { FilterScript.CONTEXT, SimilarityScript.CONTEXT, SimilarityWeightScript.CONTEXT, - MovingFunctionScript.CONTEXT, ScoreScript.CONTEXT, ScriptedMetricAggContexts.InitScript.CONTEXT, ScriptedMetricAggContexts.MapScript.CONTEXT, diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PipelineAggregationHelperTests.java b/test/framework/src/main/java/org/elasticsearch/search/aggregations/PipelineAggregationHelperTests.java similarity index 96% rename from server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PipelineAggregationHelperTests.java rename to test/framework/src/main/java/org/elasticsearch/search/aggregations/PipelineAggregationHelperTests.java index 0bc85cb175b2f..05c9dcecbc9f5 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PipelineAggregationHelperTests.java +++ b/test/framework/src/main/java/org/elasticsearch/search/aggregations/PipelineAggregationHelperTests.java @@ -6,9 +6,8 @@ * Side Public License, v 1. */ -package org.elasticsearch.search.aggregations.pipeline; +package org.elasticsearch.search.aggregations; -import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.histogram.AutoDateHistogramAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.histogram.HistogramAggregationBuilder; @@ -134,7 +133,7 @@ public static double calculateMetric(double[] values, ValuesSourceAggregationBui return 0.0; } - static AggregationBuilder getRandomSequentiallyOrderedParentAgg() throws IOException { + public static AggregationBuilder getRandomSequentiallyOrderedParentAgg() throws IOException { @SuppressWarnings("unchecked") Function builder = randomFrom( HistogramAggregationBuilder::new, From 5091656524fb118df20ab82233a127bc52538aee Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Tue, 11 Oct 2022 18:06:45 -0400 Subject: [PATCH 2/5] Move context to SPI --- modules/aggregations/build.gradle | 2 +- .../AggregationsPainlessExtension.java | 7 +++- .../test/aggregations/painless_execute.yml | 8 ++++ modules/lang-painless/build.gradle | 3 +- .../painless/spi/PainlessTestScript.java | 39 +++++++++++++++++++ .../painless/spi/WhitelistLoader.java | 1 - .../painless/PainlessPlugin.java | 5 ++- .../action/PainlessExecuteAction.java | 27 +------------ .../elasticsearch/painless/AliasTests.java | 2 +- .../org/elasticsearch/painless/Debugger.java | 2 +- .../painless/DynamicTypeTests.java | 2 +- .../painless/ScriptTestCase.java | 2 +- .../action/PainlessExecuteApiTests.java | 5 --- .../painless/action/SuggestTests.java | 2 +- 14 files changed, 64 insertions(+), 43 deletions(-) create mode 100644 modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/painless_execute.yml create mode 100644 modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/PainlessTestScript.java diff --git a/modules/aggregations/build.gradle b/modules/aggregations/build.gradle index a6ae19e813c43..48d4cd35e8524 100644 --- a/modules/aggregations/build.gradle +++ b/modules/aggregations/build.gradle @@ -17,7 +17,7 @@ esplugin { restResources { restApi { - include '_common', 'indices', 'cluster', 'index', 'search', 'nodes', 'bulk' + include '_common', 'indices', 'cluster', 'index', 'search', 'nodes', 'bulk', 'scripts_painless_execute' } } diff --git a/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java index 288cc610ecd59..33bdeb6eadbbc 100644 --- a/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java +++ b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java @@ -10,12 +10,12 @@ import org.elasticsearch.aggregations.pipeline.MovingFunctionScript; import org.elasticsearch.painless.spi.PainlessExtension; +import org.elasticsearch.painless.spi.PainlessTestScript; import org.elasticsearch.painless.spi.Whitelist; import org.elasticsearch.painless.spi.WhitelistLoader; import org.elasticsearch.script.ScriptContext; import org.elasticsearch.search.aggregations.pipeline.MovingFunctions; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -30,6 +30,9 @@ public class AggregationsPainlessExtension implements PainlessExtension { @Override public Map, List> getContextWhitelists() { - return Collections.singletonMap(MovingFunctionScript.CONTEXT, Collections.singletonList(MOVING_FUNCTION_WHITELIST)); + return Map.ofEntries( + Map.entry(MovingFunctionScript.CONTEXT, List.of(MOVING_FUNCTION_WHITELIST)), + Map.entry(PainlessTestScript.CONTEXT, List.of(MOVING_FUNCTION_WHITELIST)) + ); } } diff --git a/modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/painless_execute.yml b/modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/painless_execute.yml new file mode 100644 index 0000000000000..9ee544f7a10fb --- /dev/null +++ b/modules/aggregations/src/yamlRestTest/resources/rest-api-spec/test/aggregations/painless_execute.yml @@ -0,0 +1,8 @@ +--- +MovingFunctions are available in the default context: + - do: + scripts_painless_execute: + body: + script: + source: "MovingFunctions.max(new double[] {1.0, 2.0, -1234})" + - match: { result: "2.0" } diff --git a/modules/lang-painless/build.gradle b/modules/lang-painless/build.gradle index 31c2955c38751..17e43a755bedd 100644 --- a/modules/lang-painless/build.gradle +++ b/modules/lang-painless/build.gradle @@ -96,7 +96,8 @@ tasks.named("yamlRestTestV7CompatTest").configure { 'painless/40_fields_api/script fields api for dates', 'painless/70_execute_painless_scripts/Execute with double field context (multi-value, fields api)', 'painless/40_fields_api/filter script fields api', - 'painless/40_fields_api/script score fields api' + 'painless/40_fields_api/script score fields api', + 'painless/70_mov_fn_agg/*' // Agg moved to a module. ].join(',') } diff --git a/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/PainlessTestScript.java b/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/PainlessTestScript.java new file mode 100644 index 0000000000000..6f2f49233242f --- /dev/null +++ b/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/PainlessTestScript.java @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.painless.spi; + +import org.elasticsearch.script.ScriptContext; + +import java.util.Map; + +/** + * Generic "test" context used by the painless execute REST API + * for testing painless scripts. + */ +public abstract class PainlessTestScript { + private final Map params; + + public PainlessTestScript(Map params) { + this.params = params; + } + + /** Return the parameters for this script. */ + public Map getParams() { + return params; + } + + public abstract Object execute(); + + public interface Factory { + PainlessTestScript newInstance(Map params); + } + + public static final String[] PARAMETERS = {}; + public static final ScriptContext CONTEXT = new ScriptContext<>("painless_test", Factory.class); +} diff --git a/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/WhitelistLoader.java b/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/WhitelistLoader.java index 0ad0ab5bf096c..4709d5adacb0f 100644 --- a/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/WhitelistLoader.java +++ b/modules/lang-painless/spi/src/main/java/org/elasticsearch/painless/spi/WhitelistLoader.java @@ -150,7 +150,6 @@ public static Whitelist loadFromResourceFiles(Class resource, Map painlessScriptEngine = new SetOnce<>(); @@ -171,7 +172,7 @@ public void loadExtensions(ExtensionLoader loader) { @Override public List> getContexts() { - return Collections.singletonList(PainlessExecuteAction.PainlessTestScript.CONTEXT); + return Collections.singletonList(PainlessTestScript.CONTEXT); } @Override diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/action/PainlessExecuteAction.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/action/PainlessExecuteAction.java index e8310c42cacb0..0622057f34641 100644 --- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/action/PainlessExecuteAction.java +++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/action/PainlessExecuteAction.java @@ -56,6 +56,7 @@ import org.elasticsearch.index.query.SearchExecutionContext; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.indices.IndicesService; +import org.elasticsearch.painless.spi.PainlessTestScript; import org.elasticsearch.rest.BaseRestHandler; import org.elasticsearch.rest.RestRequest; import org.elasticsearch.rest.action.RestToXContentListener; @@ -433,32 +434,6 @@ public int hashCode() { } } - public abstract static class PainlessTestScript { - - private final Map params; - - public PainlessTestScript(Map params) { - this.params = params; - } - - /** Return the parameters for this script. */ - public Map getParams() { - return params; - } - - public abstract Object execute(); - - public interface Factory { - - PainlessTestScript newInstance(Map params); - - } - - public static final String[] PARAMETERS = {}; - public static final ScriptContext CONTEXT = new ScriptContext<>("painless_test", Factory.class); - - } - public static class TransportAction extends TransportSingleShardAction { private final ScriptService scriptService; diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/AliasTests.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/AliasTests.java index 0825fb98c2c4e..f9d87f5ce46b8 100644 --- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/AliasTests.java +++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/AliasTests.java @@ -8,8 +8,8 @@ package org.elasticsearch.painless; -import org.elasticsearch.painless.action.PainlessExecuteAction.PainlessTestScript; import org.elasticsearch.painless.lookup.PainlessLookupBuilder; +import org.elasticsearch.painless.spi.PainlessTestScript; import org.elasticsearch.painless.spi.Whitelist; import org.elasticsearch.painless.spi.WhitelistLoader; import org.elasticsearch.script.ScriptContext; diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/Debugger.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/Debugger.java index d20ac3cf31bea..04577d8ca9d81 100644 --- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/Debugger.java +++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/Debugger.java @@ -8,10 +8,10 @@ package org.elasticsearch.painless; -import org.elasticsearch.painless.action.PainlessExecuteAction.PainlessTestScript; import org.elasticsearch.painless.lookup.PainlessLookupBuilder; import org.elasticsearch.painless.phase.IRTreeVisitor; import org.elasticsearch.painless.phase.UserTreeVisitor; +import org.elasticsearch.painless.spi.PainlessTestScript; import org.elasticsearch.painless.spi.Whitelist; import org.elasticsearch.painless.symbol.ScriptScope; import org.elasticsearch.painless.symbol.WriteScope; diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/DynamicTypeTests.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/DynamicTypeTests.java index cdeea943782fe..ffbb7a17137d9 100644 --- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/DynamicTypeTests.java +++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/DynamicTypeTests.java @@ -8,7 +8,7 @@ package org.elasticsearch.painless; -import org.elasticsearch.painless.action.PainlessExecuteAction.PainlessTestScript; +import org.elasticsearch.painless.spi.PainlessTestScript; import org.elasticsearch.painless.spi.Whitelist; import org.elasticsearch.painless.spi.WhitelistLoader; import org.elasticsearch.script.ScriptContext; diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/ScriptTestCase.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/ScriptTestCase.java index 0cab58ae95504..ec5973a2d8371 100644 --- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/ScriptTestCase.java +++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/ScriptTestCase.java @@ -12,6 +12,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.painless.antlr.Walker; +import org.elasticsearch.painless.spi.PainlessTestScript; import org.elasticsearch.painless.spi.Whitelist; import org.elasticsearch.painless.spi.WhitelistLoader; import org.elasticsearch.script.ScriptContext; @@ -25,7 +26,6 @@ import java.util.List; import java.util.Map; -import static org.elasticsearch.painless.action.PainlessExecuteAction.PainlessTestScript; import static org.hamcrest.Matchers.hasSize; /** diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/action/PainlessExecuteApiTests.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/action/PainlessExecuteApiTests.java index f0cd8fbf60b44..63eb067a7a103 100644 --- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/action/PainlessExecuteApiTests.java +++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/action/PainlessExecuteApiTests.java @@ -390,11 +390,6 @@ public void testContextWhitelists() throws IOException { response = innerShardOperation(request, scriptService, null); assertEquals("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33", response.getResult()); - // movfn - request = new Request(new Script("MovingFunctions.max(new double[]{1, 3, 2})"), null, null); - response = innerShardOperation(request, scriptService, null); - assertEquals(3.0, Double.parseDouble((String) response.getResult()), .1); - // json request = new Request(new Script("Json.load('{\"a\": 1, \"b\": 2}')['b']"), null, null); response = innerShardOperation(request, scriptService, null); diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/action/SuggestTests.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/action/SuggestTests.java index c930d38675a26..f3e10ac0d1162 100644 --- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/action/SuggestTests.java +++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/action/SuggestTests.java @@ -11,9 +11,9 @@ import org.antlr.v4.runtime.ANTLRInputStream; import org.antlr.v4.runtime.Token; import org.elasticsearch.painless.ScriptTestCase; -import org.elasticsearch.painless.action.PainlessExecuteAction.PainlessTestScript; import org.elasticsearch.painless.antlr.EnhancedSuggestLexer; import org.elasticsearch.painless.antlr.SuggestLexer; +import org.elasticsearch.painless.spi.PainlessTestScript; import java.util.List; From 74086feb6518ac9de803757f6c8eb4b894982839 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Wed, 12 Oct 2022 09:19:26 -0400 Subject: [PATCH 3/5] Cleanup --- .../elasticsearch/aggregations/pipeline/CumulativeSumTests.java | 1 - .../elasticsearch/aggregations/pipeline/DerivativeTests.java | 1 - .../MovFnPipelineAggregationBuilderSerializationTests.java | 2 -- .../aggregations/pipeline/SerialDifferenceTests.java | 1 - 4 files changed, 5 deletions(-) diff --git a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/CumulativeSumTests.java b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/CumulativeSumTests.java index 227bb4917c616..7cab1eb5cfd0e 100644 --- a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/CumulativeSumTests.java +++ b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/CumulativeSumTests.java @@ -10,7 +10,6 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.BasePipelineAggregationTestCase; -import org.elasticsearch.search.aggregations.PipelineAggregationHelperTests; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.CumulativeSumPipelineAggregationBuilder; diff --git a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/DerivativeTests.java b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/DerivativeTests.java index 04dd39268658f..dcd958b604ea1 100644 --- a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/DerivativeTests.java +++ b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/DerivativeTests.java @@ -11,7 +11,6 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.BasePipelineAggregationTestCase; import org.elasticsearch.search.aggregations.PipelineAggregationBuilder; -import org.elasticsearch.search.aggregations.PipelineAggregationHelperTests; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; import org.elasticsearch.search.aggregations.pipeline.DerivativePipelineAggregationBuilder; diff --git a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java index 6851a0a5da833..88c8a54232310 100644 --- a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java +++ b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/MovFnPipelineAggregationBuilderSerializationTests.java @@ -13,9 +13,7 @@ import org.elasticsearch.script.Script; import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.BasePipelineAggregationTestCase; -import org.elasticsearch.search.aggregations.PipelineAggregationHelperTests; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; -import org.elasticsearch.search.aggregations.pipeline.MovFnPipelineAggregationBuilder; import java.io.IOException; import java.util.Collections; diff --git a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/SerialDifferenceTests.java b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/SerialDifferenceTests.java index 8c22453ec2d59..28378b8cd8708 100644 --- a/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/SerialDifferenceTests.java +++ b/modules/aggregations/src/test/java/org/elasticsearch/aggregations/pipeline/SerialDifferenceTests.java @@ -11,7 +11,6 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.BasePipelineAggregationTestCase; import org.elasticsearch.search.aggregations.PipelineAggregationBuilder; -import org.elasticsearch.search.aggregations.PipelineAggregationHelperTests; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; import org.elasticsearch.search.aggregations.pipeline.SerialDiffPipelineAggregationBuilder; From 442ec9bc8293c6e35c177477fb7fc9779fd6e06b Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 17 Oct 2022 10:04:01 -0400 Subject: [PATCH 4/5] naming --- .../aggregations/AggregationsPainlessExtension.java | 6 +++--- .../aggregations/moving_function_whitelist.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java index 33bdeb6eadbbc..e181bb0018015 100644 --- a/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java +++ b/modules/aggregations/src/main/java/org/elasticsearch/aggregations/AggregationsPainlessExtension.java @@ -23,7 +23,7 @@ * Extends the painless whitelist for the {@link MovingFunctionScript} to include {@link MovingFunctions}. */ public class AggregationsPainlessExtension implements PainlessExtension { - private static final Whitelist MOVING_FUNCTION_WHITELIST = WhitelistLoader.loadFromResourceFiles( + private static final Whitelist MOVING_FUNCTION_ALLOWLIST = WhitelistLoader.loadFromResourceFiles( AggregationsPainlessExtension.class, "moving_function_whitelist.txt" ); @@ -31,8 +31,8 @@ public class AggregationsPainlessExtension implements PainlessExtension { @Override public Map, List> getContextWhitelists() { return Map.ofEntries( - Map.entry(MovingFunctionScript.CONTEXT, List.of(MOVING_FUNCTION_WHITELIST)), - Map.entry(PainlessTestScript.CONTEXT, List.of(MOVING_FUNCTION_WHITELIST)) + Map.entry(MovingFunctionScript.CONTEXT, List.of(MOVING_FUNCTION_ALLOWLIST)), + Map.entry(PainlessTestScript.CONTEXT, List.of(MOVING_FUNCTION_ALLOWLIST)) ); } } diff --git a/modules/aggregations/src/main/resources/org/elasticsearch/aggregations/moving_function_whitelist.txt b/modules/aggregations/src/main/resources/org/elasticsearch/aggregations/moving_function_whitelist.txt index 5ca85c5863127..0575734988063 100644 --- a/modules/aggregations/src/main/resources/org/elasticsearch/aggregations/moving_function_whitelist.txt +++ b/modules/aggregations/src/main/resources/org/elasticsearch/aggregations/moving_function_whitelist.txt @@ -6,7 +6,7 @@ # Side Public License, v 1. # -# This file contains a whitelist for the Moving Function pipeline aggregator +# This file contains a allowlist for the Moving Function pipeline aggregator class org.elasticsearch.search.aggregations.pipeline.MovingFunctions { double max(double[]) From 781079c585a64c30e2288db8e09aca214d25b91f Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 17 Oct 2022 11:14:44 -0400 Subject: [PATCH 5/5] Sneaky failure --- .../java/org/elasticsearch/script/ScriptLanguagesInfoTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/test/java/org/elasticsearch/script/ScriptLanguagesInfoTests.java b/server/src/test/java/org/elasticsearch/script/ScriptLanguagesInfoTests.java index 22cf6d5aef36a..ca6d8930eb7b9 100644 --- a/server/src/test/java/org/elasticsearch/script/ScriptLanguagesInfoTests.java +++ b/server/src/test/java/org/elasticsearch/script/ScriptLanguagesInfoTests.java @@ -106,7 +106,7 @@ public void testContextsAllowedSettingRespected() { .collect(Collectors.toMap(c -> c.name, Function.identity())); List allContexts = new ArrayList<>(mockContexts.keySet()); - List allowed = allContexts.subList(0, allContexts.size() / 2); + List allowed = new ArrayList<>(allContexts.subList(0, allContexts.size() / 2)); String miscContext = "misc_context"; allowed.add(miscContext); // check that allowing more than available doesn't pollute the returned contexts