From fd185e4661ee61a99eeefe94d781839893c8bba2 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Tue, 7 Dec 2021 11:37:47 -0500 Subject: [PATCH] Bring ReduceContext to top level class (#81394) This brings `ReduceContext` to a top level class so we can add more things to it without making `InternalAggregation` huge. It also removes the now unused `pipelineTreeForBwcSerialization`. --- .../aggregations/TermsReduceBenchmark.java | 38 ++--- .../matrix/stats/InternalMatrixStats.java | 3 +- .../stats/InternalMatrixStatsTests.java | 3 +- .../search/QueryPhaseResultConsumer.java | 4 +- .../action/search/SearchPhaseController.java | 19 ++- .../action/search/SearchResponseMerger.java | 6 +- .../action/search/TransportSearchAction.java | 6 +- .../elasticsearch/search/SearchService.java | 22 +-- .../AggregationReduceContext.java | 141 ++++++++++++++++++ .../search/aggregations/DelayedBucket.java | 8 +- .../aggregations/InternalAggregation.java | 138 +---------------- .../aggregations/InternalAggregations.java | 5 +- .../InternalMultiBucketAggregation.java | 6 +- .../InternalSingleBucketAggregation.java | 5 +- .../adjacency/InternalAdjacencyMatrix.java | 5 +- .../bucket/composite/InternalComposite.java | 5 +- .../bucket/filter/InternalFilters.java | 5 +- .../bucket/geogrid/InternalGeoGrid.java | 5 +- .../histogram/InternalAutoDateHistogram.java | 25 +++- .../histogram/InternalDateHistogram.java | 9 +- .../bucket/histogram/InternalHistogram.java | 10 +- .../InternalVariableWidthHistogram.java | 15 +- .../bucket/range/InternalBinaryRange.java | 5 +- .../bucket/range/InternalRange.java | 5 +- .../bucket/sampler/UnmappedSampler.java | 3 +- .../bucket/terms/AbstractInternalTerms.java | 11 +- .../bucket/terms/DoubleTerms.java | 3 +- .../bucket/terms/InternalMappedRareTerms.java | 3 +- .../bucket/terms/InternalRareTerms.java | 5 +- .../terms/InternalSignificantTerms.java | 5 +- .../aggregations/bucket/terms/LongTerms.java | 3 +- .../bucket/terms/UnmappedRareTerms.java | 3 +- .../terms/UnmappedSignificantTerms.java | 3 +- .../bucket/terms/UnmappedTerms.java | 3 +- .../terms/heuristic/ScriptHeuristic.java | 4 +- .../heuristic/SignificanceHeuristic.java | 4 +- .../AbstractInternalHDRPercentiles.java | 3 +- .../AbstractInternalTDigestPercentiles.java | 3 +- .../aggregations/metrics/InternalAvg.java | 3 +- .../metrics/InternalCardinality.java | 3 +- .../metrics/InternalExtendedStats.java | 3 +- .../metrics/InternalGeoBounds.java | 3 +- .../metrics/InternalGeoCentroid.java | 3 +- .../aggregations/metrics/InternalMax.java | 3 +- .../InternalMedianAbsoluteDeviation.java | 3 +- .../aggregations/metrics/InternalMin.java | 3 +- .../metrics/InternalScriptedMetric.java | 3 +- .../aggregations/metrics/InternalStats.java | 3 +- .../aggregations/metrics/InternalSum.java | 3 +- .../aggregations/metrics/InternalTopHits.java | 3 +- .../metrics/InternalValueCount.java | 3 +- .../metrics/InternalWeightedAvg.java | 3 +- .../BucketMetricsPipelineAggregator.java | 4 +- .../BucketScriptPipelineAggregator.java | 4 +- .../BucketSelectorPipelineAggregator.java | 4 +- .../BucketSortPipelineAggregator.java | 4 +- .../CumulativeSumPipelineAggregator.java | 4 +- .../DerivativePipelineAggregator.java | 4 +- .../pipeline/InternalBucketMetricValue.java | 3 +- .../pipeline/InternalExtendedStatsBucket.java | 3 +- .../pipeline/InternalPercentilesBucket.java | 3 +- .../pipeline/InternalSimpleValue.java | 3 +- .../pipeline/InternalStatsBucket.java | 3 +- .../pipeline/MovFnPipelineAggregator.java | 3 +- .../pipeline/PipelineAggregator.java | 4 +- .../SerialDiffPipelineAggregator.java | 4 +- .../pipeline/SiblingPipelineAggregator.java | 6 +- .../search/QueryPhaseResultConsumerTests.java | 17 +-- .../search/SearchPhaseControllerTests.java | 24 +-- .../search/TransportSearchActionTests.java | 4 +- .../search/SearchModuleTests.java | 4 +- .../search/SearchServiceTests.java | 8 +- .../aggregations/DelayedBucketTests.java | 33 ++-- .../InternalAggregationsTests.java | 6 +- .../aggregations/TopBucketBuilderTests.java | 11 +- .../bucket/filter/FiltersAggregatorTests.java | 3 +- .../bucket/filter/InternalFilterTests.java | 4 +- .../bucket/filter/InternalFiltersTests.java | 4 +- .../DateHistogramAggregatorTests.java | 4 +- .../InternalVariableWidthHistogramTests.java | 11 +- .../bucket/terms/TermsAggregatorTests.java | 5 +- .../metrics/InternalScriptedMetricTests.java | 4 +- .../aggregations/AggregatorTestCase.java | 10 +- ...AbstractSignificanceHeuristicTestCase.java | 3 +- .../test/InternalAggregationTestCase.java | 40 ++--- ...nternalMultiBucketAggregationTestCase.java | 5 +- .../analytics/boxplot/InternalBoxplot.java | 3 +- ...mulativeCardinalityPipelineAggregator.java | 4 +- .../InternalSimpleLongValue.java | 3 +- .../MovingPercentilesPipelineAggregator.java | 4 +- .../multiterms/InternalMultiTerms.java | 5 +- .../NormalizePipelineAggregator.java | 4 +- .../xpack/analytics/rate/InternalRate.java | 3 +- .../stringstats/InternalStringStats.java | 3 +- .../topmetrics/InternalTopMetrics.java | 3 +- .../xpack/analytics/ttest/InternalTTest.java | 3 +- .../multiterms/InternalMultiTermsTests.java | 10 +- .../xpack/search/AsyncSearchTask.java | 6 +- .../TransportSubmitAsyncSearchAction.java | 8 +- .../InternalCategorizationAggregation.java | 7 +- .../UnmappedCategorizationAggregation.java | 3 +- .../BucketCorrelationAggregator.java | 3 +- .../InferencePipelineAggregator.java | 4 +- .../InternalInferenceAggregation.java | 3 +- .../kstest/BucketCountKSTestAggregator.java | 3 +- .../kstest/InternalKSTestAggregation.java | 3 +- .../rollup/RollupResponseTranslator.java | 18 +-- .../action/TransportRollupSearchAction.java | 8 +- .../RollupResponseTranslationTests.java | 29 ++-- .../rollup/action/SearchActionTests.java | 13 +- .../search/aggregations/InternalGeoLine.java | 3 +- .../extractor/TestMultiValueAggregation.java | 3 +- .../extractor/TestSingleValueAggregation.java | 3 +- .../pivot/AggregationResultUtilsTests.java | 5 +- 114 files changed, 520 insertions(+), 494 deletions(-) create mode 100644 server/src/main/java/org/elasticsearch/search/aggregations/AggregationReduceContext.java diff --git a/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/TermsReduceBenchmark.java b/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/TermsReduceBenchmark.java index 7b53bb55f51b..3c34166dbd4e 100644 --- a/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/TermsReduceBenchmark.java +++ b/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/TermsReduceBenchmark.java @@ -24,8 +24,8 @@ import org.elasticsearch.indices.breaker.NoneCircuitBreakerService; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.SearchShardTarget; import org.elasticsearch.search.aggregations.AggregationBuilders; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.BucketOrder; -import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.MultiBucketConsumerService; import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; @@ -65,29 +65,21 @@ import java.util.concurrent.atomic.AtomicBoolean; @Fork(value = 1) public class TermsReduceBenchmark { - private final SearchPhaseController controller = new SearchPhaseController( - (task, req) -> new InternalAggregation.ReduceContextBuilder() { - @Override - public InternalAggregation.ReduceContext forPartialReduction() { - return InternalAggregation.ReduceContext.forPartialReduction(null, null, () -> PipelineAggregator.PipelineTree.EMPTY, task); - } - - @Override - public InternalAggregation.ReduceContext forFinalReduction() { - final MultiBucketConsumerService.MultiBucketConsumer bucketConsumer = new MultiBucketConsumerService.MultiBucketConsumer( - Integer.MAX_VALUE, - new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) - ); - return InternalAggregation.ReduceContext.forFinalReduction( - null, - null, - bucketConsumer, - PipelineAggregator.PipelineTree.EMPTY, - task - ); - } + private final SearchPhaseController controller = new SearchPhaseController((task, req) -> new AggregationReduceContext.Builder() { + @Override + public AggregationReduceContext forPartialReduction() { + return new AggregationReduceContext.ForPartial(null, null, task); } - ); + + @Override + public AggregationReduceContext forFinalReduction() { + final MultiBucketConsumerService.MultiBucketConsumer bucketConsumer = new MultiBucketConsumerService.MultiBucketConsumer( + Integer.MAX_VALUE, + new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) + ); + return new AggregationReduceContext.ForFinal(null, null, bucketConsumer, PipelineAggregator.PipelineTree.EMPTY, task); + } + }); @State(Scope.Benchmark) public static class TermsList extends AbstractList { diff --git a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/InternalMatrixStats.java b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/InternalMatrixStats.java index 2a3f9768429e..90656c0e063b 100644 --- a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/InternalMatrixStats.java +++ b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/InternalMatrixStats.java @@ -9,6 +9,7 @@ package org.elasticsearch.search.aggregations.matrix.stats; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -226,7 +227,7 @@ public class InternalMatrixStats extends InternalAggregation implements MatrixSt } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { // merge stats across all shards List aggs = new ArrayList<>(aggregations); aggs.removeIf(p -> ((InternalMatrixStats) p).stats == null); diff --git a/modules/aggs-matrix-stats/src/test/java/org/elasticsearch/search/aggregations/matrix/stats/InternalMatrixStatsTests.java b/modules/aggs-matrix-stats/src/test/java/org/elasticsearch/search/aggregations/matrix/stats/InternalMatrixStatsTests.java index 75a96dd8b5e7..9b1c90f48fc6 100644 --- a/modules/aggs-matrix-stats/src/test/java/org/elasticsearch/search/aggregations/matrix/stats/InternalMatrixStatsTests.java +++ b/modules/aggs-matrix-stats/src/test/java/org/elasticsearch/search/aggregations/matrix/stats/InternalMatrixStatsTests.java @@ -15,6 +15,7 @@ import org.elasticsearch.indices.breaker.NoneCircuitBreakerService; import org.elasticsearch.plugins.SearchPlugin; import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.ParsedAggregation; import org.elasticsearch.search.aggregations.matrix.MatrixAggregationPlugin; @@ -153,7 +154,7 @@ public class InternalMatrixStatsTests extends InternalAggregationTestCase {}, diff --git a/server/src/main/java/org/elasticsearch/action/search/QueryPhaseResultConsumer.java b/server/src/main/java/org/elasticsearch/action/search/QueryPhaseResultConsumer.java index 739ee17851e6..ef6e4520ac61 100644 --- a/server/src/main/java/org/elasticsearch/action/search/QueryPhaseResultConsumer.java +++ b/server/src/main/java/org/elasticsearch/action/search/QueryPhaseResultConsumer.java @@ -21,7 +21,7 @@ import org.elasticsearch.core.Releasable; import org.elasticsearch.core.Releasables; import org.elasticsearch.search.SearchPhaseResult; import org.elasticsearch.search.SearchShardTarget; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContextBuilder; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.query.QuerySearchResult; @@ -57,7 +57,7 @@ public class QueryPhaseResultConsumer extends ArraySearchPhaseResults, SearchRequest, InternalAggregation.ReduceContextBuilder> requestToAggReduceContextBuilder; + private final BiFunction, SearchRequest, AggregationReduceContext.Builder> requestToAggReduceContextBuilder; public SearchPhaseController( - BiFunction, SearchRequest, InternalAggregation.ReduceContextBuilder> requestToAggReduceContextBuilder + BiFunction, SearchRequest, AggregationReduceContext.Builder> requestToAggReduceContextBuilder ) { this.requestToAggReduceContextBuilder = requestToAggReduceContextBuilder; } @@ -380,14 +379,14 @@ public final class SearchPhaseController { * @param queryResults a list of non-null query shard results */ ReducedQueryPhase reducedScrollQueryPhase(Collection queryResults) { - InternalAggregation.ReduceContextBuilder aggReduceContextBuilder = new InternalAggregation.ReduceContextBuilder() { + AggregationReduceContext.Builder aggReduceContextBuilder = new AggregationReduceContext.Builder() { @Override - public ReduceContext forPartialReduction() { + public AggregationReduceContext forPartialReduction() { throw new UnsupportedOperationException("Scroll requests don't have aggs"); } @Override - public ReduceContext forFinalReduction() { + public AggregationReduceContext forFinalReduction() { throw new UnsupportedOperationException("Scroll requests don't have aggs"); } }; @@ -423,7 +422,7 @@ public final class SearchPhaseController { TopDocsStats topDocsStats, int numReducePhases, boolean isScrollRequest, - InternalAggregation.ReduceContextBuilder aggReduceContextBuilder, + AggregationReduceContext.Builder aggReduceContextBuilder, boolean performFinalReduce ) { assert numReducePhases >= 0 : "num reduce phases must be >= 0 but was: " + numReducePhases; @@ -528,7 +527,7 @@ public final class SearchPhaseController { } private static InternalAggregations reduceAggs( - InternalAggregation.ReduceContextBuilder aggReduceContextBuilder, + AggregationReduceContext.Builder aggReduceContextBuilder, boolean performFinalReduce, List toReduce ) { @@ -679,7 +678,7 @@ public final class SearchPhaseController { } } - InternalAggregation.ReduceContextBuilder getReduceContext(Supplier isCanceled, SearchRequest request) { + AggregationReduceContext.Builder getReduceContext(Supplier isCanceled, SearchRequest request) { return requestToAggReduceContextBuilder.apply(isCanceled, request); } diff --git a/server/src/main/java/org/elasticsearch/action/search/SearchResponseMerger.java b/server/src/main/java/org/elasticsearch/action/search/SearchResponseMerger.java index 3b2caa7bdb98..2afecf9602be 100644 --- a/server/src/main/java/org/elasticsearch/action/search/SearchResponseMerger.java +++ b/server/src/main/java/org/elasticsearch/action/search/SearchResponseMerger.java @@ -24,7 +24,7 @@ import org.elasticsearch.lucene.grouping.TopFieldGroups; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.SearchShardTarget; -import org.elasticsearch.search.aggregations.InternalAggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.internal.InternalSearchResponse; import org.elasticsearch.search.profile.SearchProfileResults; @@ -69,7 +69,7 @@ final class SearchResponseMerger { final int size; final int trackTotalHitsUpTo; private final SearchTimeProvider searchTimeProvider; - private final InternalAggregation.ReduceContextBuilder aggReduceContextBuilder; + private final AggregationReduceContext.Builder aggReduceContextBuilder; private final List searchResponses = new CopyOnWriteArrayList<>(); SearchResponseMerger( @@ -77,7 +77,7 @@ final class SearchResponseMerger { int size, int trackTotalHitsUpTo, SearchTimeProvider searchTimeProvider, - InternalAggregation.ReduceContextBuilder aggReduceContextBuilder + AggregationReduceContext.Builder aggReduceContextBuilder ) { this.from = from; this.size = size; diff --git a/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java b/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java index fb04afe0b268..4c79fbfbb8cd 100644 --- a/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java +++ b/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java @@ -52,7 +52,7 @@ import org.elasticsearch.indices.breaker.CircuitBreakerService; import org.elasticsearch.search.SearchPhaseResult; import org.elasticsearch.search.SearchService; import org.elasticsearch.search.SearchShardTarget; -import org.elasticsearch.search.aggregations.InternalAggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.internal.AliasFilter; @@ -507,7 +507,7 @@ public class TransportSearchAction extends HandledTransportAction remoteIndices, SearchTimeProvider timeProvider, - InternalAggregation.ReduceContextBuilder aggReduceContextBuilder, + AggregationReduceContext.Builder aggReduceContextBuilder, RemoteClusterService remoteClusterService, ThreadPool threadPool, ActionListener listener, @@ -632,7 +632,7 @@ public class TransportSearchAction extends HandledTransportAction isCanceled, SearchRequest request) { - return new InternalAggregation.ReduceContextBuilder() { + public AggregationReduceContext.Builder aggReduceContextBuilder(Supplier isCanceled, SearchRequest request) { + return new AggregationReduceContext.Builder() { @Override - public InternalAggregation.ReduceContext forPartialReduction() { - return InternalAggregation.ReduceContext.forPartialReduction( - bigArrays, - scriptService, - () -> requestToPipelineTree(request), - isCanceled - ); + public AggregationReduceContext forPartialReduction() { + return new AggregationReduceContext.ForPartial(bigArrays, scriptService, isCanceled); } @Override - public ReduceContext forFinalReduction() { + public AggregationReduceContext forFinalReduction() { PipelineTree pipelineTree = requestToPipelineTree(request); - return InternalAggregation.ReduceContext.forFinalReduction( + return new AggregationReduceContext.ForFinal( bigArrays, scriptService, multiBucketConsumerService.create(), diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/AggregationReduceContext.java b/server/src/main/java/org/elasticsearch/search/aggregations/AggregationReduceContext.java new file mode 100644 index 000000000000..18623dc6f474 --- /dev/null +++ b/server/src/main/java/org/elasticsearch/search/aggregations/AggregationReduceContext.java @@ -0,0 +1,141 @@ +/* + * 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.search.aggregations; + +import org.elasticsearch.common.util.BigArrays; +import org.elasticsearch.script.ScriptService; +import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.PipelineTree; +import org.elasticsearch.tasks.TaskCancelledException; + +import java.util.function.IntConsumer; +import java.util.function.Supplier; + +public abstract sealed class AggregationReduceContext permits AggregationReduceContext.ForPartial,AggregationReduceContext.ForFinal { + /** + * Builds {@link AggregationReduceContext}s. + */ + public interface Builder { + /** + * Build an {@linkplain AggregationReduceContext} to perform a partial reduction. + */ + AggregationReduceContext forPartialReduction(); + + /** + * Build an {@linkplain AggregationReduceContext} to perform the final reduction. + */ + AggregationReduceContext forFinalReduction(); + } + + private final BigArrays bigArrays; + private final ScriptService scriptService; + private final Supplier isCanceled; + + public AggregationReduceContext(BigArrays bigArrays, ScriptService scriptService, Supplier isCanceled) { + this.bigArrays = bigArrays; + this.scriptService = scriptService; + this.isCanceled = isCanceled; + } + + /** + * Returns true iff the current reduce phase is the final + * reduce phase. This indicates if operations like pipeline aggregations + * should be applied or if specific features like {@code minDocCount} + * should be taken into account. Operations that are potentially losing + * information can only be applied during the final reduce phase. + */ + public abstract boolean isFinalReduce(); + + public final BigArrays bigArrays() { + return bigArrays; + } + + public final ScriptService scriptService() { + return scriptService; + } + + public final Supplier isCanceled() { + return isCanceled; + } + + /** + * The root of the tree of pipeline aggregations for this request. + */ + public abstract PipelineTree pipelineTreeRoot(); + + /** + * Adds {@code count} buckets to the global count for the request and fails if this number is greater than + * the maximum number of buckets allowed in a response + */ + public final void consumeBucketsAndMaybeBreak(int size) { + // This is a volatile read. + if (isCanceled.get()) { + throw new TaskCancelledException("Cancelled"); + } + consumeBucketCountAndMaybeBreak(size); + } + + protected abstract void consumeBucketCountAndMaybeBreak(int size); + + /** + * A {@linkplain AggregationReduceContext} to perform a partial reduction. + */ + public static final class ForPartial extends AggregationReduceContext { + public ForPartial(BigArrays bigArrays, ScriptService scriptService, Supplier isCanceled) { + super(bigArrays, scriptService, isCanceled); + } + + @Override + public boolean isFinalReduce() { + return false; + } + + @Override + protected void consumeBucketCountAndMaybeBreak(int size) {} + + @Override + public PipelineTree pipelineTreeRoot() { + return null; + } + } + + /** + * A {@linkplain AggregationReduceContext} to perform the final reduction. + */ + public static final class ForFinal extends AggregationReduceContext { + private final IntConsumer multiBucketConsumer; + private final PipelineTree pipelineTreeRoot; + + public ForFinal( + BigArrays bigArrays, + ScriptService scriptService, + IntConsumer multiBucketConsumer, + PipelineTree pipelineTreeRoot, + Supplier isCanceled + ) { + super(bigArrays, scriptService, isCanceled); + this.multiBucketConsumer = multiBucketConsumer; + this.pipelineTreeRoot = pipelineTreeRoot; + } + + @Override + public boolean isFinalReduce() { + return true; + } + + @Override + protected void consumeBucketCountAndMaybeBreak(int size) { + multiBucketConsumer.accept(size); + } + + @Override + public PipelineTree pipelineTreeRoot() { + return pipelineTreeRoot; + } + } +} diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/DelayedBucket.java b/server/src/main/java/org/elasticsearch/search/aggregations/DelayedBucket.java index 6ccaad711343..8cc0bba4dc33 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/DelayedBucket.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/DelayedBucket.java @@ -16,8 +16,8 @@ import java.util.function.BiFunction; * as long as possible. It's stateful and not even close to thread safe. */ public final class DelayedBucket { - private final BiFunction, InternalAggregation.ReduceContext, B> reduce; - private final InternalAggregation.ReduceContext reduceContext; + private final BiFunction, AggregationReduceContext, B> reduce; + private final AggregationReduceContext reduceContext; /** * The buckets to reduce or {@code null} if we've already reduced the buckets. */ @@ -40,8 +40,8 @@ public final class DelayedBucket, InternalAggregation.ReduceContext, B> reduce, - InternalAggregation.ReduceContext reduceContext, + BiFunction, AggregationReduceContext, B> reduce, + AggregationReduceContext reduceContext, List toReduce ) { this.reduce = reduce; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/InternalAggregation.java b/server/src/main/java/org/elasticsearch/search/aggregations/InternalAggregation.java index 3a5933a732af..8df70a847c34 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/InternalAggregation.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/InternalAggregation.java @@ -11,13 +11,10 @@ import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.NamedWriteable; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.common.util.BigArrays; import org.elasticsearch.rest.action.search.RestSearchAction; -import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.PipelineTree; import org.elasticsearch.search.aggregations.support.AggregationPath; -import org.elasticsearch.tasks.TaskCancelledException; import org.elasticsearch.xcontent.XContentBuilder; import java.io.IOException; @@ -27,142 +24,11 @@ import java.util.Map; import java.util.Objects; import java.util.function.Consumer; import java.util.function.Function; -import java.util.function.IntConsumer; -import java.util.function.Supplier; - -import static java.util.Objects.requireNonNull; /** * An internal implementation of {@link Aggregation}. Serves as a base class for all aggregation implementations. */ public abstract class InternalAggregation implements Aggregation, NamedWriteable { - /** - * Builds {@link ReduceContext}. - */ - public interface ReduceContextBuilder { - /** - * Build a {@linkplain ReduceContext} to perform a partial reduction. - */ - ReduceContext forPartialReduction(); - - /** - * Build a {@linkplain ReduceContext} to perform the final reduction. - */ - ReduceContext forFinalReduction(); - } - - public static class ReduceContext { - private final BigArrays bigArrays; - private final ScriptService scriptService; - private final IntConsumer multiBucketConsumer; - private final PipelineTree pipelineTreeRoot; - private final Supplier isCanceled; - /** - * Supplies the pipelines when the result of the reduce is serialized - * to node versions that need pipeline aggregators to be serialized - * to them. - */ - private final Supplier pipelineTreeForBwcSerialization; - - /** - * Build a {@linkplain ReduceContext} to perform a partial reduction. - */ - public static ReduceContext forPartialReduction( - BigArrays bigArrays, - ScriptService scriptService, - Supplier pipelineTreeForBwcSerialization, - Supplier isCanceled - ) { - return new ReduceContext(bigArrays, scriptService, (s) -> {}, null, pipelineTreeForBwcSerialization, isCanceled); - } - - /** - * Build a {@linkplain ReduceContext} to perform the final reduction. - * @param pipelineTreeRoot The root of tree of pipeline aggregations for this request - */ - public static ReduceContext forFinalReduction( - BigArrays bigArrays, - ScriptService scriptService, - IntConsumer multiBucketConsumer, - PipelineTree pipelineTreeRoot, - Supplier isCanceled - ) { - return new ReduceContext( - bigArrays, - scriptService, - multiBucketConsumer, - requireNonNull(pipelineTreeRoot, "prefer EMPTY to null"), - () -> pipelineTreeRoot, - isCanceled - ); - } - - private ReduceContext( - BigArrays bigArrays, - ScriptService scriptService, - IntConsumer multiBucketConsumer, - PipelineTree pipelineTreeRoot, - Supplier pipelineTreeForBwcSerialization, - Supplier isCanceled - ) { - this.bigArrays = bigArrays; - this.scriptService = scriptService; - this.multiBucketConsumer = multiBucketConsumer; - this.pipelineTreeRoot = pipelineTreeRoot; - this.pipelineTreeForBwcSerialization = pipelineTreeForBwcSerialization; - this.isCanceled = isCanceled; - } - - /** - * Returns true iff the current reduce phase is the final reduce phase. This indicates if operations like - * pipeline aggregations should be applied or if specific features like {@code minDocCount} should be taken into account. - * Operations that are potentially losing information can only be applied during the final reduce phase. - */ - public boolean isFinalReduce() { - return pipelineTreeRoot != null; - } - - public BigArrays bigArrays() { - return bigArrays; - } - - public ScriptService scriptService() { - return scriptService; - } - - /** - * The root of the tree of pipeline aggregations for this request. - */ - public PipelineTree pipelineTreeRoot() { - return pipelineTreeRoot; - } - - /** - * Supplies the pipelines when the result of the reduce is serialized - * to node versions that need pipeline aggregators to be serialized - * to them. - */ - public Supplier pipelineTreeForBwcSerialization() { - return pipelineTreeForBwcSerialization; - } - - /** - * Adds {@code count} buckets to the global count for the request and fails if this number is greater than - * the maximum number of buckets allowed in a response - */ - public void consumeBucketsAndMaybeBreak(int size) { - // This is a volatile read. - if (isCanceled.get()) { - throw new TaskCancelledException("Cancelled"); - } - multiBucketConsumer.accept(size); - } - - public Supplier isCanceled() { - return isCanceled; - } - } - protected final String name; protected final Map metadata; @@ -234,7 +100,7 @@ public abstract class InternalAggregation implements Aggregation, NamedWriteable */ public InternalAggregation reducePipelines( InternalAggregation reducedAggs, - ReduceContext reduceContext, + AggregationReduceContext reduceContext, PipelineTree pipelinesForThisAgg ) { assert reduceContext.isFinalReduce(); @@ -252,7 +118,7 @@ public abstract class InternalAggregation implements Aggregation, NamedWriteable * * @see #mustReduceOnSingleInternalAgg() */ - public abstract InternalAggregation reduce(List aggregations, ReduceContext reduceContext); + public abstract InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext); /** * Signal the framework if the {@linkplain InternalAggregation#reduce(List, ReduceContext)} phase needs to be called diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/InternalAggregations.java b/server/src/main/java/org/elasticsearch/search/aggregations/InternalAggregations.java index 61e8f03ee026..9fecc4f29399 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/InternalAggregations.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/InternalAggregations.java @@ -10,7 +10,6 @@ package org.elasticsearch.search.aggregations; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.pipeline.SiblingPipelineAggregator; import org.elasticsearch.search.aggregations.support.AggregationPath; @@ -99,7 +98,7 @@ public final class InternalAggregations extends Aggregations implements Writeabl * This method first reduces the aggregations, and if it is the final reduce, then reduce the pipeline * aggregations (both embedded parent/sibling as well as top-level sibling pipelines) */ - public static InternalAggregations topLevelReduce(List aggregationsList, ReduceContext context) { + public static InternalAggregations topLevelReduce(List aggregationsList, AggregationReduceContext context) { InternalAggregations reduced = reduce(aggregationsList, context); if (reduced == null) { return null; @@ -127,7 +126,7 @@ public final class InternalAggregations extends Aggregations implements Writeabl * Note that pipeline aggregations _are not_ reduced by this method. Pipelines are handled * separately by {@link InternalAggregations#topLevelReduce(List, ReduceContext)} */ - public static InternalAggregations reduce(List aggregationsList, ReduceContext context) { + public static InternalAggregations reduce(List aggregationsList, AggregationReduceContext context) { if (aggregationsList.isEmpty()) { return null; } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/InternalMultiBucketAggregation.java b/server/src/main/java/org/elasticsearch/search/aggregations/InternalMultiBucketAggregation.java index b44d8db247bd..3eaba9669efb 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/InternalMultiBucketAggregation.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/InternalMultiBucketAggregation.java @@ -63,7 +63,7 @@ public abstract class InternalMultiBucketAggregation< * Reduce a list of same-keyed buckets (from multiple shards) to a single bucket. This * requires all buckets to have the same key. */ - protected abstract B reduceBucket(List buckets, ReduceContext context); + protected abstract B reduceBucket(List buckets, AggregationReduceContext context); @Override public abstract List getBuckets(); @@ -141,7 +141,7 @@ public abstract class InternalMultiBucketAggregation< @Override public final InternalAggregation reducePipelines( InternalAggregation reducedAggs, - ReduceContext reduceContext, + AggregationReduceContext reduceContext, PipelineTree pipelineTree ) { assert reduceContext.isFinalReduce(); @@ -182,7 +182,7 @@ public abstract class InternalMultiBucketAggregation< } } - private List reducePipelineBuckets(ReduceContext reduceContext, PipelineTree pipelineTree) { + private List reducePipelineBuckets(AggregationReduceContext reduceContext, PipelineTree pipelineTree) { List reducedBuckets = new ArrayList<>(); for (B bucket : getBuckets()) { List aggs = new ArrayList<>(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/InternalSingleBucketAggregation.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/InternalSingleBucketAggregation.java index afcb147c91d9..3a3861a54724 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/InternalSingleBucketAggregation.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/InternalSingleBucketAggregation.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.bucket; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.PipelineTree; @@ -89,7 +90,7 @@ public abstract class InternalSingleBucketAggregation extends InternalAggregatio protected abstract InternalSingleBucketAggregation newAggregation(String name, long docCount, InternalAggregations subAggregations); @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { long docCount = 0L; List subAggregationsList = new ArrayList<>(aggregations.size()); for (InternalAggregation aggregation : aggregations) { @@ -108,7 +109,7 @@ public abstract class InternalSingleBucketAggregation extends InternalAggregatio @Override public final InternalAggregation reducePipelines( InternalAggregation reducedAggs, - ReduceContext reduceContext, + AggregationReduceContext reduceContext, PipelineTree pipelineTree ) { assert reduceContext.isFinalReduce(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/adjacency/InternalAdjacencyMatrix.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/adjacency/InternalAdjacencyMatrix.java index 4a3c7615707e..02970c58d40b 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/adjacency/InternalAdjacencyMatrix.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/adjacency/InternalAdjacencyMatrix.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.bucket.adjacency; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; @@ -167,7 +168,7 @@ public class InternalAdjacencyMatrix extends InternalMultiBucketAggregation aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { Map> bucketsMap = new HashMap<>(); for (InternalAggregation aggregation : aggregations) { InternalAdjacencyMatrix filters = (InternalAdjacencyMatrix) aggregation; @@ -197,7 +198,7 @@ public class InternalAdjacencyMatrix extends InternalMultiBucketAggregation buckets, ReduceContext context) { + protected InternalBucket reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; InternalBucket reduced = null; List aggregationsList = new ArrayList<>(buckets.size()); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/InternalComposite.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/InternalComposite.java index 2db84e849baa..6bdc9a6439aa 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/InternalComposite.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/InternalComposite.java @@ -14,6 +14,7 @@ import org.elasticsearch.Version; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -186,7 +187,7 @@ public class InternalComposite extends InternalMultiBucketAggregation aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { PriorityQueue pq = new PriorityQueue<>(aggregations.size()) { @Override protected boolean lessThan(BucketIterator a, BucketIterator b) { @@ -253,7 +254,7 @@ public class InternalComposite extends InternalMultiBucketAggregation buckets, ReduceContext context) { + protected InternalBucket reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; List aggregations = new ArrayList<>(buckets.size()); long docCount = 0; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilters.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilters.java index 633ae98223fd..0f33b0d267d0 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilters.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilters.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.bucket.filter; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; @@ -175,7 +176,7 @@ public class InternalFilters extends InternalMultiBucketAggregation aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { List> bucketsList = null; for (InternalAggregation aggregation : aggregations) { InternalFilters filters = (InternalFilters) aggregation; @@ -203,7 +204,7 @@ public class InternalFilters extends InternalMultiBucketAggregation buckets, ReduceContext context) { + protected InternalBucket reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; InternalBucket reduced = null; List aggregationsList = new ArrayList<>(buckets.size()); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoGrid.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoGrid.java index 402d93745018..3a226f83ec11 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoGrid.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoGrid.java @@ -11,6 +11,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.util.LongObjectPagedHashMap; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; @@ -69,7 +70,7 @@ public abstract class InternalGeoGrid extends I } @Override - public InternalGeoGrid reduce(List aggregations, ReduceContext reduceContext) { + public InternalGeoGrid reduce(List aggregations, AggregationReduceContext reduceContext) { LongObjectPagedHashMap> buckets = null; for (InternalAggregation aggregation : aggregations) { @SuppressWarnings("unchecked") @@ -104,7 +105,7 @@ public abstract class InternalGeoGrid extends I } @Override - protected InternalGeoGridBucket reduceBucket(List buckets, ReduceContext context) { + protected InternalGeoGridBucket reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; List aggregationsList = new ArrayList<>(buckets.size()); long docCount = 0; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalAutoDateHistogram.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalAutoDateHistogram.java index 903dd746b759..25fdfc1393da 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalAutoDateHistogram.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalAutoDateHistogram.java @@ -12,6 +12,7 @@ import org.elasticsearch.common.Rounding; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -271,7 +272,7 @@ public final class InternalAutoDateHistogram extends InternalMultiBucketAggregat * rounding returned across all the shards so the resolution of the buckets * is the same and they can be reduced together. */ - private BucketReduceResult reduceBuckets(List aggregations, ReduceContext reduceContext) { + private BucketReduceResult reduceBuckets(List aggregations, AggregationReduceContext reduceContext) { // First we need to find the highest level rounding used across all the // shards @@ -338,7 +339,7 @@ public final class InternalAutoDateHistogram extends InternalMultiBucketAggregat return mergeBucketsIfNeeded(new BucketReduceResult(reducedBuckets, reduceRoundingIdx, 1, reduceRounding, min, max), reduceContext); } - private BucketReduceResult mergeBucketsIfNeeded(BucketReduceResult firstPassResult, ReduceContext reduceContext) { + private BucketReduceResult mergeBucketsIfNeeded(BucketReduceResult firstPassResult, AggregationReduceContext reduceContext) { int idx = firstPassResult.roundingIdx; RoundingInfo info = bucketInfo.roundingInfos[idx]; List buckets = firstPassResult.buckets; @@ -357,7 +358,11 @@ public final class InternalAutoDateHistogram extends InternalMultiBucketAggregat return min <= max ? rounding.prepare(min, max) : rounding.prepareForUnknown(); } - private List mergeBuckets(List reducedBuckets, Rounding.Prepared reduceRounding, ReduceContext reduceContext) { + private List mergeBuckets( + List reducedBuckets, + Rounding.Prepared reduceRounding, + AggregationReduceContext reduceContext + ) { List mergedBuckets = new ArrayList<>(); List sameKeyedBuckets = new ArrayList<>(); @@ -384,7 +389,7 @@ public final class InternalAutoDateHistogram extends InternalMultiBucketAggregat } @Override - protected Bucket reduceBucket(List buckets, ReduceContext context) { + protected Bucket reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; List aggregations = new ArrayList<>(buckets.size()); long docCount = 0; @@ -421,7 +426,7 @@ public final class InternalAutoDateHistogram extends InternalMultiBucketAggregat } } - private BucketReduceResult addEmptyBuckets(BucketReduceResult current, ReduceContext reduceContext) { + private BucketReduceResult addEmptyBuckets(BucketReduceResult current, AggregationReduceContext reduceContext) { List list = current.buckets; if (list.isEmpty()) { return current; @@ -500,7 +505,7 @@ public final class InternalAutoDateHistogram extends InternalMultiBucketAggregat } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { BucketReduceResult reducedBucketsResult = reduceBuckets(aggregations, reduceContext); if (reduceContext.isFinalReduce()) { @@ -531,7 +536,7 @@ public final class InternalAutoDateHistogram extends InternalMultiBucketAggregat ); } - private BucketReduceResult maybeMergeConsecutiveBuckets(BucketReduceResult current, ReduceContext reduceContext) { + private BucketReduceResult maybeMergeConsecutiveBuckets(BucketReduceResult current, AggregationReduceContext reduceContext) { List buckets = current.buckets; RoundingInfo roundingInfo = bucketInfo.roundingInfos[current.roundingIdx]; if (buckets.size() > targetBuckets) { @@ -548,7 +553,11 @@ public final class InternalAutoDateHistogram extends InternalMultiBucketAggregat return current; } - private BucketReduceResult mergeConsecutiveBuckets(BucketReduceResult current, int mergeInterval, ReduceContext reduceContext) { + private BucketReduceResult mergeConsecutiveBuckets( + BucketReduceResult current, + int mergeInterval, + AggregationReduceContext reduceContext + ) { List mergedBuckets = new ArrayList<>(); List sameKeyedBuckets = new ArrayList<>(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalDateHistogram.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalDateHistogram.java index 03c6c646b26c..430e8297b0b2 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalDateHistogram.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalDateHistogram.java @@ -13,6 +13,7 @@ import org.elasticsearch.common.Rounding; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.BucketOrder; import org.elasticsearch.search.aggregations.InternalAggregation; @@ -287,7 +288,7 @@ public final class InternalDateHistogram extends InternalMultiBucketAggregation< return new Bucket(prototype.key, prototype.docCount, prototype.keyed, prototype.format, aggregations); } - private List reduceBuckets(List aggregations, ReduceContext reduceContext) { + private List reduceBuckets(List aggregations, AggregationReduceContext reduceContext) { final PriorityQueue> pq = new PriorityQueue<>(aggregations.size()) { @Override @@ -348,7 +349,7 @@ public final class InternalDateHistogram extends InternalMultiBucketAggregation< * requires all buckets to have the same key. */ @Override - protected Bucket reduceBucket(List buckets, ReduceContext context) { + protected Bucket reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; List aggregations = new ArrayList<>(buckets.size()); long docCount = 0; @@ -372,7 +373,7 @@ public final class InternalDateHistogram extends InternalMultiBucketAggregation< */ private static final int REPORT_EMPTY_EVERY = 10_000; - private void addEmptyBuckets(List list, ReduceContext reduceContext) { + private void addEmptyBuckets(List list, AggregationReduceContext reduceContext) { /* * Make sure we have space for the empty buckets we're going to add by * counting all of the empties we plan to add and firing them into @@ -456,7 +457,7 @@ public final class InternalDateHistogram extends InternalMultiBucketAggregation< } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { List reducedBuckets = reduceBuckets(aggregations, reduceContext); boolean alreadyAccountedForBuckets = false; if (reduceContext.isFinalReduce()) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogram.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogram.java index b98f9a771f47..d7dc1aec813a 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogram.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogram.java @@ -12,6 +12,7 @@ import org.apache.lucene.util.PriorityQueue; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.BucketOrder; import org.elasticsearch.search.aggregations.InternalAggregation; @@ -269,8 +270,7 @@ public final class InternalHistogram extends InternalMultiBucketAggregation reduceBuckets(List aggregations, ReduceContext reduceContext) { - + private List reduceBuckets(List aggregations, AggregationReduceContext reduceContext) { final PriorityQueue> pq = new PriorityQueue<>(aggregations.size()) { @Override protected boolean lessThan(IteratorAndCurrent a, IteratorAndCurrent b) { @@ -327,7 +327,7 @@ public final class InternalHistogram extends InternalMultiBucketAggregation buckets, ReduceContext context) { + protected Bucket reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; List aggregations = new ArrayList<>(buckets.size()); long docCount = 0; @@ -359,7 +359,7 @@ public final class InternalHistogram extends InternalMultiBucketAggregation list, ReduceContext reduceContext) { + private void addEmptyBuckets(List list, AggregationReduceContext reduceContext) { /* * Make sure we have space for the empty buckets we're going to add by * counting all of the empties we plan to add and firing them into @@ -431,7 +431,7 @@ public final class InternalHistogram extends InternalMultiBucketAggregation aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { List reducedBuckets = reduceBuckets(aggregations, reduceContext); boolean alreadyAccountedForBuckets = false; if (reduceContext.isFinalReduce()) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalVariableWidthHistogram.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalVariableWidthHistogram.java index 8c9dd09d1fee..81b54024b6bd 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalVariableWidthHistogram.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalVariableWidthHistogram.java @@ -12,6 +12,7 @@ import org.apache.lucene.util.PriorityQueue; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -316,7 +317,7 @@ public class InternalVariableWidthHistogram extends InternalMultiBucketAggregati } @Override - protected Bucket reduceBucket(List buckets, ReduceContext context) { + protected Bucket reduceBucket(List buckets, AggregationReduceContext context) { List aggregations = new ArrayList<>(buckets.size()); long docCount = 0; double min = Double.POSITIVE_INFINITY; @@ -335,7 +336,7 @@ public class InternalVariableWidthHistogram extends InternalMultiBucketAggregati return new Bucket(centroid, bounds, docCount, format, aggs); } - public List reduceBuckets(List aggregations, ReduceContext reduceContext) { + public List reduceBuckets(List aggregations, AggregationReduceContext reduceContext) { PriorityQueue> pq = new PriorityQueue<>(aggregations.size()) { @Override protected boolean lessThan(IteratorAndCurrent a, IteratorAndCurrent b) { @@ -420,7 +421,7 @@ public class InternalVariableWidthHistogram extends InternalMultiBucketAggregati * For each range {startIdx, endIdx} in ranges, all the buckets in that index range * from buckets are merged, and this merged bucket replaces the entire range. */ - private void mergeBucketsWithPlan(List buckets, List plan, ReduceContext reduceContext) { + private void mergeBucketsWithPlan(List buckets, List plan, AggregationReduceContext reduceContext) { for (int i = plan.size() - 1; i >= 0; i--) { BucketRange range = plan.get(i); int endIdx = range.endIdx; @@ -450,7 +451,7 @@ public class InternalVariableWidthHistogram extends InternalMultiBucketAggregati * * Requires: buckets is sorted by centroid. */ - private void mergeBucketsIfNeeded(List buckets, int targetNumBuckets, ReduceContext reduceContext) { + private void mergeBucketsIfNeeded(List buckets, int targetNumBuckets, AggregationReduceContext reduceContext) { // Make a plan for getting the target number of buckets // Each range represents a set of adjacent bucket indices of buckets that will be merged together List ranges = new ArrayList<>(); @@ -489,7 +490,7 @@ public class InternalVariableWidthHistogram extends InternalMultiBucketAggregati mergeBucketsWithPlan(buckets, ranges, reduceContext); } - private void mergeBucketsWithSameMin(List buckets, ReduceContext reduceContext) { + private void mergeBucketsWithSameMin(List buckets, AggregationReduceContext reduceContext) { // Create a merge plan List ranges = new ArrayList<>(); @@ -526,7 +527,7 @@ public class InternalVariableWidthHistogram extends InternalMultiBucketAggregati * * After this adjustment, A will contain more values than indicated and B will have less. */ - private void adjustBoundsForOverlappingBuckets(List buckets, ReduceContext reduceContext) { + private void adjustBoundsForOverlappingBuckets(List buckets, AggregationReduceContext reduceContext) { for (int i = 1; i < buckets.size(); i++) { Bucket curBucket = buckets.get(i); Bucket prevBucket = buckets.get(i - 1); @@ -540,7 +541,7 @@ public class InternalVariableWidthHistogram extends InternalMultiBucketAggregati } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { List reducedBuckets = reduceBuckets(aggregations, reduceContext); if (reduceContext.isFinalReduce()) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalBinaryRange.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalBinaryRange.java index 6ec329eb0ec7..d95bec4c0cd6 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalBinaryRange.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalBinaryRange.java @@ -12,6 +12,7 @@ import org.apache.lucene.util.BytesRef; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -223,7 +224,7 @@ public final class InternalBinaryRange extends InternalMultiBucketAggregation aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { reduceContext.consumeBucketsAndMaybeBreak(buckets.size()); long[] docCounts = new long[buckets.size()]; InternalAggregations[][] aggs = new InternalAggregations[buckets.size()][]; @@ -260,7 +261,7 @@ public final class InternalBinaryRange extends InternalMultiBucketAggregation buckets, ReduceContext context) { + protected Bucket reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; List aggregationsList = buckets.stream().map(bucket -> bucket.aggregations).collect(Collectors.toList()); final InternalAggregations aggs = InternalAggregations.reduce(aggregationsList, context); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java index 2a9bc1aaecad..a83c7dedff9b 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.bucket.range; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; @@ -304,7 +305,7 @@ public class InternalRange aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { reduceContext.consumeBucketsAndMaybeBreak(ranges.size()); @SuppressWarnings("rawtypes") List[] rangeList = new List[ranges.size()]; @@ -327,7 +328,7 @@ public class InternalRange buckets, ReduceContext context) { + protected B reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; long docCount = 0; List aggregationsList = new ArrayList<>(buckets.size()); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/UnmappedSampler.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/UnmappedSampler.java index 93b1d8cc0a7f..36be5db096d0 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/UnmappedSampler.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/UnmappedSampler.java @@ -9,6 +9,7 @@ package org.elasticsearch.search.aggregations.bucket.sampler; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.xcontent.XContentBuilder; @@ -37,7 +38,7 @@ public class UnmappedSampler extends InternalSampler { } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { return new UnmappedSampler(name, metadata); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/AbstractInternalTerms.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/AbstractInternalTerms.java index b8acf86da819..e11d51d71ffd 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/AbstractInternalTerms.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/AbstractInternalTerms.java @@ -11,6 +11,7 @@ package org.elasticsearch.search.aggregations.bucket.terms; import org.apache.lucene.util.PriorityQueue; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.BucketOrder; import org.elasticsearch.search.aggregations.DelayedBucket; import org.elasticsearch.search.aggregations.InternalAggregation; @@ -84,7 +85,7 @@ public abstract class AbstractInternalTerms buckets, ReduceContext context) { + public B reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; long docCount = 0; // For the per term doc count error we add up the errors from the @@ -151,7 +152,7 @@ public abstract class AbstractInternalTerms aggregations, - InternalAggregation.ReduceContext reduceContext, + AggregationReduceContext reduceContext, Function, Boolean> sink ) { /* @@ -174,7 +175,7 @@ public abstract class AbstractInternalTerms aggregations, BucketOrder thisReduceOrder, - InternalAggregation.ReduceContext reduceContext, + AggregationReduceContext reduceContext, Function, Boolean> sink ) { assert isKeyOrder(thisReduceOrder); @@ -231,7 +232,7 @@ public abstract class AbstractInternalTerms aggregations, - InternalAggregation.ReduceContext reduceContext, + AggregationReduceContext reduceContext, Function, Boolean> sink ) { Map> bucketMap = new HashMap<>(); @@ -254,7 +255,7 @@ public abstract class AbstractInternalTerms aggregations, InternalAggregation.ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { long sumDocCountError = 0; long[] otherDocCount = new long[] { 0 }; A referenceTerms = null; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/DoubleTerms.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/DoubleTerms.java index 76b34650d5db..b35a480ed0c0 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/DoubleTerms.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/DoubleTerms.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.bucket.terms; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.BucketOrder; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -186,7 +187,7 @@ public class DoubleTerms extends InternalMappedTerms aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { boolean promoteToDouble = false; for (InternalAggregation agg : aggregations) { if (agg instanceof LongTerms diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalMappedRareTerms.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalMappedRareTerms.java index 76b9b744c4e1..aec681cdefa5 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalMappedRareTerms.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalMappedRareTerms.java @@ -16,6 +16,7 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.util.SetBackedScalingCuckooFilter; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.BucketOrder; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -81,7 +82,7 @@ public abstract class InternalMappedRareTerms, } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { Map> buckets = new HashMap<>(); InternalRareTerms referenceTerms = null; SetBackedScalingCuckooFilter filter = null; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalRareTerms.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalRareTerms.java index 3fec16e450ee..2b2f6a19d46a 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalRareTerms.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalRareTerms.java @@ -11,6 +11,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.util.SetBackedScalingCuckooFilter; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.BucketOrder; import org.elasticsearch.search.aggregations.InternalAggregation; @@ -144,14 +145,14 @@ public abstract class InternalRareTerms, B ext public abstract B getBucketByKey(String term); @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException(); } abstract B createBucket(long docCount, InternalAggregations aggs, B prototype); @Override - protected B reduceBucket(List buckets, ReduceContext context) { + protected B reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; long docCount = 0; List aggregationsList = new ArrayList<>(buckets.size()); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalSignificantTerms.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalSignificantTerms.java index fff4de102386..349ccbc56ae5 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalSignificantTerms.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/InternalSignificantTerms.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.bucket.terms; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.Aggregator; import org.elasticsearch.search.aggregations.InternalAggregation; @@ -195,7 +196,7 @@ public abstract class InternalSignificantTerms getBuckets(); @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { long globalSubsetSize = 0; long globalSupersetSize = 0; // Compute the overall result set size and the corpus size using the @@ -256,7 +257,7 @@ public abstract class InternalSignificantTerms buckets, ReduceContext context) { + protected B reduceBucket(List buckets, AggregationReduceContext context) { assert buckets.size() > 0; long subsetDf = 0; long supersetDf = 0; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/LongTerms.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/LongTerms.java index a519e0246a5d..c57b7e696deb 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/LongTerms.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/LongTerms.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.bucket.terms; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.BucketOrder; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -198,7 +199,7 @@ public class LongTerms extends InternalMappedTerms } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { boolean unsignedLongFormat = false; boolean rawFormat = false; for (InternalAggregation agg : aggregations) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedRareTerms.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedRareTerms.java index 11a23acdb207..6fde7887c40b 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedRareTerms.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedRareTerms.java @@ -11,6 +11,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.util.SetBackedScalingCuckooFilter; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.xcontent.XContentBuilder; @@ -81,7 +82,7 @@ public class UnmappedRareTerms extends InternalRareTerms aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { return new UnmappedRareTerms(name, metadata); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedSignificantTerms.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedSignificantTerms.java index 6ec5dc7580c7..76d84e82dce6 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedSignificantTerms.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedSignificantTerms.java @@ -11,6 +11,7 @@ import org.apache.lucene.util.BytesRef; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.bucket.terms.heuristic.SignificanceHeuristic; @@ -103,7 +104,7 @@ public class UnmappedSignificantTerms extends InternalSignificantTerms aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { return new UnmappedSignificantTerms(name, requiredSize, minDocCount, metadata); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedTerms.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedTerms.java index 6d7384621b37..b08dcb828230 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedTerms.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/UnmappedTerms.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.bucket.terms; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.BucketOrder; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -91,7 +92,7 @@ public class UnmappedTerms extends InternalTerms aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { return new UnmappedTerms(name, order, requiredSize, minDocCount, metadata); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/heuristic/ScriptHeuristic.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/heuristic/ScriptHeuristic.java index d7c5896896ab..68e822ed6f8f 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/heuristic/ScriptHeuristic.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/heuristic/ScriptHeuristic.java @@ -12,7 +12,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.script.Script; import org.elasticsearch.script.SignificantTermsHeuristicScoreScript; -import org.elasticsearch.search.aggregations.InternalAggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.xcontent.ConstructingObjectParser; import org.elasticsearch.xcontent.XContentBuilder; @@ -87,7 +87,7 @@ public class ScriptHeuristic extends SignificanceHeuristic { } @Override - public SignificanceHeuristic rewrite(InternalAggregation.ReduceContext context) { + public SignificanceHeuristic rewrite(AggregationReduceContext context) { SignificantTermsHeuristicScoreScript.Factory factory = context.scriptService() .compile(script, SignificantTermsHeuristicScoreScript.CONTEXT); return new ExecutableScriptHeuristic(script, factory.newInstance()); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/heuristic/SignificanceHeuristic.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/heuristic/SignificanceHeuristic.java index edd82bce6210..b8814732eef0 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/heuristic/SignificanceHeuristic.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/heuristic/SignificanceHeuristic.java @@ -9,7 +9,7 @@ package org.elasticsearch.search.aggregations.bucket.terms.heuristic; import org.elasticsearch.common.io.stream.NamedWriteable; -import org.elasticsearch.search.aggregations.InternalAggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.bucket.terms.SignificantTerms; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.xcontent.ToXContentFragment; @@ -53,7 +53,7 @@ public abstract class SignificanceHeuristic implements NamedWriteable, ToXConten * @param reduceContext the reduce context on the coordinating node * @return a version of this heuristic suitable for execution */ - public SignificanceHeuristic rewrite(InternalAggregation.ReduceContext reduceContext) { + public SignificanceHeuristic rewrite(AggregationReduceContext reduceContext) { return this; } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/AbstractInternalHDRPercentiles.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/AbstractInternalHDRPercentiles.java index f8f1ff064944..15f703c9e71c 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/AbstractInternalHDRPercentiles.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/AbstractInternalHDRPercentiles.java @@ -12,6 +12,7 @@ import org.HdrHistogram.DoubleHistogram; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -119,7 +120,7 @@ abstract class AbstractInternalHDRPercentiles extends InternalNumericMetricsAggr } @Override - public AbstractInternalHDRPercentiles reduce(List aggregations, ReduceContext reduceContext) { + public AbstractInternalHDRPercentiles reduce(List aggregations, AggregationReduceContext reduceContext) { DoubleHistogram merged = null; for (InternalAggregation aggregation : aggregations) { final AbstractInternalHDRPercentiles percentiles = (AbstractInternalHDRPercentiles) aggregation; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/AbstractInternalTDigestPercentiles.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/AbstractInternalTDigestPercentiles.java index bd85adcbebff..551e36f057c1 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/AbstractInternalTDigestPercentiles.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/AbstractInternalTDigestPercentiles.java @@ -11,6 +11,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -103,7 +104,7 @@ abstract class AbstractInternalTDigestPercentiles extends InternalNumericMetrics } @Override - public AbstractInternalTDigestPercentiles reduce(List aggregations, ReduceContext reduceContext) { + public AbstractInternalTDigestPercentiles reduce(List aggregations, AggregationReduceContext reduceContext) { TDigestState merged = null; for (InternalAggregation aggregation : aggregations) { final AbstractInternalTDigestPercentiles percentiles = (AbstractInternalTDigestPercentiles) aggregation; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalAvg.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalAvg.java index 73d3374f6423..9d74fc0b9961 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalAvg.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalAvg.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -74,7 +75,7 @@ public class InternalAvg extends InternalNumericMetricsAggregation.SingleValue i } @Override - public InternalAvg reduce(List aggregations, ReduceContext reduceContext) { + public InternalAvg reduce(List aggregations, AggregationReduceContext reduceContext) { CompensatedSum kahanSummation = new CompensatedSum(0, 0); long count = 0; // Compute the sum of double values with Kahan summation algorithm which is more diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalCardinality.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalCardinality.java index b7d24a632174..f6e83a40e729 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalCardinality.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalCardinality.java @@ -12,6 +12,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.util.BigArrays; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -72,7 +73,7 @@ public final class InternalCardinality extends InternalNumericMetricsAggregation } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { HyperLogLogPlusPlus reduced = null; for (InternalAggregation aggregation : aggregations) { final InternalCardinality cardinality = (InternalCardinality) aggregation; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalExtendedStats.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalExtendedStats.java index c60ec7f87e46..955080750007 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalExtendedStats.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalExtendedStats.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -256,7 +257,7 @@ public class InternalExtendedStats extends InternalStats implements ExtendedStat } @Override - public InternalExtendedStats reduce(List aggregations, ReduceContext reduceContext) { + public InternalExtendedStats reduce(List aggregations, AggregationReduceContext reduceContext) { double sumOfSqrs = 0; double compensationOfSqrs = 0; for (InternalAggregation aggregation : aggregations) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalGeoBounds.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalGeoBounds.java index c19de43b4cc8..94623f2ea78d 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalGeoBounds.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalGeoBounds.java @@ -12,6 +12,7 @@ import org.elasticsearch.common.geo.GeoBoundingBox; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -81,7 +82,7 @@ public class InternalGeoBounds extends InternalAggregation implements GeoBounds } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { double top = Double.NEGATIVE_INFINITY; double bottom = Double.POSITIVE_INFINITY; double posLeft = Double.POSITIVE_INFINITY; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalGeoCentroid.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalGeoCentroid.java index 25f9ee191df0..1b807cf43262 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalGeoCentroid.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalGeoCentroid.java @@ -13,6 +13,7 @@ import org.elasticsearch.Version; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.ParseField; import org.elasticsearch.xcontent.XContentBuilder; @@ -102,7 +103,7 @@ public class InternalGeoCentroid extends InternalAggregation implements GeoCentr } @Override - public InternalGeoCentroid reduce(List aggregations, ReduceContext reduceContext) { + public InternalGeoCentroid reduce(List aggregations, AggregationReduceContext reduceContext) { double lonSum = Double.NaN; double latSum = Double.NaN; long totalCount = 0; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMax.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMax.java index cb78d5bc3863..50dde6105b3f 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMax.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMax.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -58,7 +59,7 @@ public class InternalMax extends InternalNumericMetricsAggregation.SingleValue i } @Override - public InternalMax reduce(List aggregations, ReduceContext reduceContext) { + public InternalMax reduce(List aggregations, AggregationReduceContext reduceContext) { double max = Double.NEGATIVE_INFINITY; for (InternalAggregation aggregation : aggregations) { max = Math.max(max, ((InternalMax) aggregation).max); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMedianAbsoluteDeviation.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMedianAbsoluteDeviation.java index 5cf19686ed73..04084bcd435a 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMedianAbsoluteDeviation.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMedianAbsoluteDeviation.java @@ -11,6 +11,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -63,7 +64,7 @@ public class InternalMedianAbsoluteDeviation extends InternalNumericMetricsAggre } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { final TDigestState valueMerged = new TDigestState(valuesSketch.compression()); for (InternalAggregation aggregation : aggregations) { final InternalMedianAbsoluteDeviation madAggregation = (InternalMedianAbsoluteDeviation) aggregation; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMin.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMin.java index 6838f9905f3e..768c45902d70 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMin.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalMin.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -58,7 +59,7 @@ public class InternalMin extends InternalNumericMetricsAggregation.SingleValue i } @Override - public InternalMin reduce(List aggregations, ReduceContext reduceContext) { + public InternalMin reduce(List aggregations, AggregationReduceContext reduceContext) { double min = Double.POSITIVE_INFINITY; for (InternalAggregation aggregation : aggregations) { min = Math.min(min, ((InternalMin) aggregation).min); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetric.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetric.java index bf2b716d4950..55fc00873de4 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetric.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetric.java @@ -14,6 +14,7 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.util.CollectionUtils; import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptedMetricAggContexts; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -87,7 +88,7 @@ public class InternalScriptedMetric extends InternalAggregation implements Scrip } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { List aggregationObjects = new ArrayList<>(); for (InternalAggregation aggregation : aggregations) { InternalScriptedMetric mapReduceAggregation = (InternalScriptedMetric) aggregation; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalStats.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalStats.java index aecb85250e8d..77686ffb1105 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalStats.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalStats.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -161,7 +162,7 @@ public class InternalStats extends InternalNumericMetricsAggregation.MultiValue } @Override - public InternalStats reduce(List aggregations, ReduceContext reduceContext) { + public InternalStats reduce(List aggregations, AggregationReduceContext reduceContext) { long count = 0; double min = Double.POSITIVE_INFINITY; double max = Double.NEGATIVE_INFINITY; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalSum.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalSum.java index 40b18035f09f..d0af715762c4 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalSum.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalSum.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -58,7 +59,7 @@ public class InternalSum extends InternalNumericMetricsAggregation.SingleValue i } @Override - public InternalSum reduce(List aggregations, ReduceContext reduceContext) { + public InternalSum reduce(List aggregations, AggregationReduceContext reduceContext) { // Compute the sum of double values with Kahan summation algorithm which is more // accurate than naive summation. CompensatedSum kahanSummation = new CompensatedSum(0, 0); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalTopHits.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalTopHits.java index 077d9821fa87..bef3aa1e9b29 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalTopHits.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalTopHits.java @@ -19,6 +19,7 @@ import org.elasticsearch.common.lucene.Lucene; import org.elasticsearch.common.lucene.search.TopDocsAndMaxScore; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -93,7 +94,7 @@ public class InternalTopHits extends InternalAggregation implements TopHits { } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { final SearchHits[] shardHits = new SearchHits[aggregations.size()]; final int from; final int size; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalValueCount.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalValueCount.java index ebbf1c55d596..f453243ab29e 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalValueCount.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalValueCount.java @@ -9,6 +9,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -57,7 +58,7 @@ public class InternalValueCount extends InternalNumericMetricsAggregation.Single } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { long valueCount = 0; for (InternalAggregation aggregation : aggregations) { valueCount += ((InternalValueCount) aggregation).value; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalWeightedAvg.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalWeightedAvg.java index e1af1cec7e92..bc772cf8efd5 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalWeightedAvg.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/InternalWeightedAvg.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.metrics; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -74,7 +75,7 @@ public class InternalWeightedAvg extends InternalNumericMetricsAggregation.Singl } @Override - public InternalWeightedAvg reduce(List aggregations, ReduceContext reduceContext) { + public InternalWeightedAvg reduce(List aggregations, AggregationReduceContext reduceContext) { CompensatedSum sumCompensation = new CompensatedSum(0, 0); CompensatedSum weightCompensation = new CompensatedSum(0, 0); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketMetricsPipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketMetricsPipelineAggregator.java index cc53eab68327..6a9deb61819a 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketMetricsPipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketMetricsPipelineAggregator.java @@ -10,9 +10,9 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; import org.elasticsearch.search.aggregations.support.AggregationPath; @@ -42,7 +42,7 @@ public abstract class BucketMetricsPipelineAggregator extends SiblingPipelineAgg } @Override - public final InternalAggregation doReduce(Aggregations aggregations, ReduceContext context) { + public final InternalAggregation doReduce(Aggregations aggregations, AggregationReduceContext context) { preCollection(); List bucketsPath = AggregationPath.parse(bucketsPaths()[0]).getPathElementsAsStringList(); for (Aggregation aggregation : aggregations) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptPipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptPipelineAggregator.java index 553abf85d521..201923fb9c09 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptPipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptPipelineAggregator.java @@ -11,8 +11,8 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.script.BucketAggregationScript; import org.elasticsearch.script.Script; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; @@ -48,7 +48,7 @@ public class BucketScriptPipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { @SuppressWarnings({ "rawtypes", "unchecked" }) InternalMultiBucketAggregation originalAgg = (InternalMultiBucketAggregation) aggregation; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketSelectorPipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketSelectorPipelineAggregator.java index 07035a2c22f1..b4bf5bdb054a 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketSelectorPipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketSelectorPipelineAggregator.java @@ -10,8 +10,8 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.script.BucketAggregationSelectorScript; import org.elasticsearch.script.Script; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; @@ -41,7 +41,7 @@ public class BucketSelectorPipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { @SuppressWarnings({ "rawtypes", "unchecked" }) InternalMultiBucketAggregation originalAgg = (InternalMultiBucketAggregation) aggregation; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketSortPipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketSortPipelineAggregator.java index 24ba865241dc..4e3cef67acd0 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketSortPipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketSortPipelineAggregator.java @@ -7,8 +7,8 @@ */ package org.elasticsearch.search.aggregations.pipeline; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; @@ -44,7 +44,7 @@ public class BucketSortPipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { @SuppressWarnings({ "rawtypes", "unchecked" }) InternalMultiBucketAggregation originalAgg = (InternalMultiBucketAggregation) aggregation; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/CumulativeSumPipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/CumulativeSumPipelineAggregator.java index f6738848f087..dffc235d31e9 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/CumulativeSumPipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/CumulativeSumPipelineAggregator.java @@ -9,8 +9,8 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation.Bucket; @@ -34,7 +34,7 @@ public class CumulativeSumPipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { @SuppressWarnings("rawtypes") InternalMultiBucketAggregation< ? extends InternalMultiBucketAggregation, diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/DerivativePipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/DerivativePipelineAggregator.java index 19abd5af6fd9..9911fece7eb3 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/DerivativePipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/DerivativePipelineAggregator.java @@ -9,8 +9,8 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation.Bucket; @@ -45,7 +45,7 @@ public class DerivativePipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { @SuppressWarnings("rawtypes") InternalMultiBucketAggregation< ? extends InternalMultiBucketAggregation, diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalBucketMetricValue.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalBucketMetricValue.java index d3eaa55a826e..aea74890ded1 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalBucketMetricValue.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalBucketMetricValue.java @@ -11,6 +11,7 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.InternalNumericMetricsAggregation; import org.elasticsearch.xcontent.ParseField; @@ -73,7 +74,7 @@ public class InternalBucketMetricValue extends InternalNumericMetricsAggregation } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException("Not supported"); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalExtendedStatsBucket.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalExtendedStatsBucket.java index 616d4b53171c..f98f8b593086 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalExtendedStatsBucket.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalExtendedStatsBucket.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.InternalExtendedStats; @@ -45,7 +46,7 @@ public class InternalExtendedStatsBucket extends InternalExtendedStats implement } @Override - public InternalExtendedStats reduce(List aggregations, ReduceContext reduceContext) { + public InternalExtendedStats reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException("Not supported"); } } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalPercentilesBucket.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalPercentilesBucket.java index 48e61c063a7b..e91a258dbd82 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalPercentilesBucket.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalPercentilesBucket.java @@ -11,6 +11,7 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.InternalMax; import org.elasticsearch.search.aggregations.metrics.InternalNumericMetricsAggregation; @@ -129,7 +130,7 @@ public class InternalPercentilesBucket extends InternalNumericMetricsAggregation } @Override - public InternalMax reduce(List aggregations, ReduceContext reduceContext) { + public InternalMax reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException("Not supported"); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalSimpleValue.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalSimpleValue.java index ae4db4682919..f18ffa392306 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalSimpleValue.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalSimpleValue.java @@ -11,6 +11,7 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.InternalNumericMetricsAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -64,7 +65,7 @@ public class InternalSimpleValue extends InternalNumericMetricsAggregation.Singl } @Override - public InternalSimpleValue reduce(List aggregations, ReduceContext reduceContext) { + public InternalSimpleValue reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException("Not supported"); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalStatsBucket.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalStatsBucket.java index be638cf3373a..b7fc230e8da1 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalStatsBucket.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/InternalStatsBucket.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.InternalStats; @@ -43,7 +44,7 @@ public class InternalStatsBucket extends InternalStats implements StatsBucket { } @Override - public InternalStats reduce(List aggregations, ReduceContext reduceContext) { + public InternalStats reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException("Not supported"); } } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregator.java index a400f1eeddcf..0a3e20e5da83 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/MovFnPipelineAggregator.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.script.Script; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; @@ -70,7 +71,7 @@ public class MovFnPipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, InternalAggregation.ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { @SuppressWarnings("rawtypes") InternalMultiBucketAggregation< ? extends InternalMultiBucketAggregation, diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/PipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/PipelineAggregator.java index f6a0b5936980..4c2f9a825c1f 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/PipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/PipelineAggregator.java @@ -8,8 +8,8 @@ package org.elasticsearch.search.aggregations.pipeline; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.PipelineAggregationBuilder; import org.elasticsearch.xcontent.ParseField; import org.elasticsearch.xcontent.XContentParser; @@ -114,5 +114,5 @@ public abstract class PipelineAggregator { return metadata; } - public abstract InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext); + public abstract InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/SerialDiffPipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/SerialDiffPipelineAggregator.java index cc522f62d9c0..1c61d3322c9f 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/SerialDiffPipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/SerialDiffPipelineAggregator.java @@ -11,8 +11,8 @@ package org.elasticsearch.search.aggregations.pipeline; import org.elasticsearch.common.collect.EvictingQueue; import org.elasticsearch.core.Nullable; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation.Bucket; @@ -47,7 +47,7 @@ public class SerialDiffPipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { @SuppressWarnings("rawtypes") InternalMultiBucketAggregation< ? extends InternalMultiBucketAggregation, diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/SiblingPipelineAggregator.java b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/SiblingPipelineAggregator.java index c583875db997..9c63e13afa03 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/SiblingPipelineAggregator.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/pipeline/SiblingPipelineAggregator.java @@ -8,9 +8,9 @@ package org.elasticsearch.search.aggregations.pipeline; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import java.util.List; @@ -22,7 +22,7 @@ public abstract class SiblingPipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { return aggregation.copyWithRewritenBuckets(aggregations -> { List aggs = aggregations.copyResults(); aggs.add(doReduce(aggregations, reduceContext)); @@ -30,5 +30,5 @@ public abstract class SiblingPipelineAggregator extends PipelineAggregator { }); } - public abstract InternalAggregation doReduce(Aggregations aggregations, ReduceContext context); + public abstract InternalAggregation doReduce(Aggregations aggregations, AggregationReduceContext context); } diff --git a/server/src/test/java/org/elasticsearch/action/search/QueryPhaseResultConsumerTests.java b/server/src/test/java/org/elasticsearch/action/search/QueryPhaseResultConsumerTests.java index c957682a03c8..1fccb34a1804 100644 --- a/server/src/test/java/org/elasticsearch/action/search/QueryPhaseResultConsumerTests.java +++ b/server/src/test/java/org/elasticsearch/action/search/QueryPhaseResultConsumerTests.java @@ -20,7 +20,7 @@ import org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.SearchShardTarget; -import org.elasticsearch.search.aggregations.InternalAggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.query.QuerySearchResult; @@ -46,19 +46,14 @@ public class QueryPhaseResultConsumerTests extends ESTestCase { @Before public void setup() { - searchPhaseController = new SearchPhaseController((t, s) -> new InternalAggregation.ReduceContextBuilder() { + searchPhaseController = new SearchPhaseController((t, s) -> new AggregationReduceContext.Builder() { @Override - public InternalAggregation.ReduceContext forPartialReduction() { - return InternalAggregation.ReduceContext.forPartialReduction( - BigArrays.NON_RECYCLING_INSTANCE, - null, - () -> PipelineAggregator.PipelineTree.EMPTY, - t - ); + public AggregationReduceContext forPartialReduction() { + return new AggregationReduceContext.ForPartial(BigArrays.NON_RECYCLING_INSTANCE, null, t); } - public InternalAggregation.ReduceContext forFinalReduction() { - return InternalAggregation.ReduceContext.forFinalReduction( + public AggregationReduceContext forFinalReduction() { + return new AggregationReduceContext.ForFinal( BigArrays.NON_RECYCLING_INSTANCE, null, b -> {}, diff --git a/server/src/test/java/org/elasticsearch/action/search/SearchPhaseControllerTests.java b/server/src/test/java/org/elasticsearch/action/search/SearchPhaseControllerTests.java index 1a7e5e931769..3d841de0a777 100644 --- a/server/src/test/java/org/elasticsearch/action/search/SearchPhaseControllerTests.java +++ b/server/src/test/java/org/elasticsearch/action/search/SearchPhaseControllerTests.java @@ -41,8 +41,7 @@ import org.elasticsearch.search.SearchModule; import org.elasticsearch.search.SearchPhaseResult; import org.elasticsearch.search.SearchShardTarget; import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.metrics.InternalMax; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.PipelineTree; @@ -112,27 +111,16 @@ public class SearchPhaseControllerTests extends ESTestCase { @Before public void setup() { reductions = new CopyOnWriteArrayList<>(); - searchPhaseController = new SearchPhaseController((t, s) -> new InternalAggregation.ReduceContextBuilder() { + searchPhaseController = new SearchPhaseController((t, s) -> new AggregationReduceContext.Builder() { @Override - public ReduceContext forPartialReduction() { + public AggregationReduceContext forPartialReduction() { reductions.add(false); - return InternalAggregation.ReduceContext.forPartialReduction( - BigArrays.NON_RECYCLING_INSTANCE, - null, - () -> PipelineTree.EMPTY, - t - ); + return new AggregationReduceContext.ForPartial(BigArrays.NON_RECYCLING_INSTANCE, null, t); } - public ReduceContext forFinalReduction() { + public AggregationReduceContext forFinalReduction() { reductions.add(true); - return InternalAggregation.ReduceContext.forFinalReduction( - BigArrays.NON_RECYCLING_INSTANCE, - null, - b -> {}, - PipelineTree.EMPTY, - t - ); + return new AggregationReduceContext.ForFinal(BigArrays.NON_RECYCLING_INSTANCE, null, b -> {}, PipelineTree.EMPTY, t); }; }); threadPool = new TestThreadPool(SearchPhaseControllerTests.class.getName()); diff --git a/server/src/test/java/org/elasticsearch/action/search/TransportSearchActionTests.java b/server/src/test/java/org/elasticsearch/action/search/TransportSearchActionTests.java index 1fd255c11183..7bf6f5e3a74d 100644 --- a/server/src/test/java/org/elasticsearch/action/search/TransportSearchActionTests.java +++ b/server/src/test/java/org/elasticsearch/action/search/TransportSearchActionTests.java @@ -47,7 +47,7 @@ import org.elasticsearch.search.Scroll; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.SearchShardTarget; -import org.elasticsearch.search.aggregations.InternalAggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.collapse.CollapseBuilder; @@ -465,7 +465,7 @@ public class TransportSearchActionTests extends ESTestCase { boolean local = randomBoolean(); OriginalIndices localIndices = local ? new OriginalIndices(new String[] { "index" }, SearchRequest.DEFAULT_INDICES_OPTIONS) : null; TransportSearchAction.SearchTimeProvider timeProvider = new TransportSearchAction.SearchTimeProvider(0, 0, () -> 0); - Function reduceContext = finalReduce -> null; + Function reduceContext = finalReduce -> null; try (MockTransportService service = MockTransportService.createNewService(settings, Version.CURRENT, threadPool, null)) { service.start(); service.acceptIncomingRequests(); diff --git a/server/src/test/java/org/elasticsearch/search/SearchModuleTests.java b/server/src/test/java/org/elasticsearch/search/SearchModuleTests.java index ac3a4e92faff..148e3768ce12 100644 --- a/server/src/test/java/org/elasticsearch/search/SearchModuleTests.java +++ b/server/src/test/java/org/elasticsearch/search/SearchModuleTests.java @@ -26,11 +26,11 @@ import org.elasticsearch.index.query.TypeQueryV7Builder; import org.elasticsearch.index.query.functionscore.GaussDecayFunctionBuilder; import org.elasticsearch.plugins.SearchPlugin; import org.elasticsearch.search.aggregations.AggregationBuilder; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.AggregatorFactories.Builder; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.BaseAggregationBuilder; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.heuristic.ChiSquare; import org.elasticsearch.search.aggregations.pipeline.AbstractPipelineAggregationBuilder; @@ -588,7 +588,7 @@ public class SearchModuleTests extends ESTestCase { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { return null; } } diff --git a/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java b/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java index 9a95ab04bab4..da02d9939932 100644 --- a/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java +++ b/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java @@ -75,7 +75,7 @@ import org.elasticsearch.script.MockScriptPlugin; import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptType; import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.InternalAggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.MultiBucketConsumerService; import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; @@ -1241,16 +1241,16 @@ public class SearchServiceTests extends ESSingleNodeTestCase { public void testCreateReduceContext() { SearchService service = getInstanceFromNode(SearchService.class); - InternalAggregation.ReduceContextBuilder reduceContextBuilder = service.aggReduceContextBuilder(() -> false, new SearchRequest()); + AggregationReduceContext.Builder reduceContextBuilder = service.aggReduceContextBuilder(() -> false, new SearchRequest()); { - InternalAggregation.ReduceContext reduceContext = reduceContextBuilder.forFinalReduction(); + AggregationReduceContext reduceContext = reduceContextBuilder.forFinalReduction(); expectThrows( MultiBucketConsumerService.TooManyBucketsException.class, () -> reduceContext.consumeBucketsAndMaybeBreak(MultiBucketConsumerService.DEFAULT_MAX_BUCKETS + 1) ); } { - InternalAggregation.ReduceContext reduceContext = reduceContextBuilder.forPartialReduction(); + AggregationReduceContext reduceContext = reduceContextBuilder.forPartialReduction(); reduceContext.consumeBucketsAndMaybeBreak(MultiBucketConsumerService.DEFAULT_MAX_BUCKETS + 1); } } diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/DelayedBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/DelayedBucketTests.java index 5b633eb933f6..76c210971aea 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/DelayedBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/DelayedBucketTests.java @@ -10,22 +10,20 @@ package org.elasticsearch.search.aggregations; import org.apache.lucene.util.BytesRef; import org.elasticsearch.search.DocValueFormat; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation.InternalBucket; import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation.Bucket; import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.test.InternalAggregationTestCase; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BiFunction; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.lessThan; import static org.hamcrest.Matchers.sameInstance; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; public class DelayedBucketTests extends ESTestCase { public void testToString() { @@ -33,18 +31,18 @@ public class DelayedBucketTests extends ESTestCase { } public void testReduced() { - ReduceContext context = mock(ReduceContext.class); + AtomicInteger buckets = new AtomicInteger(); + AggregationReduceContext context = new AggregationReduceContext.ForFinal(null, null, buckets::addAndGet, null, () -> false); DelayedBucket b = new DelayedBucket<>(mockReduce(context), context, List.of(bucket("test", 1), bucket("test", 2))); assertThat(b.getDocCount(), equalTo(3L)); assertThat(b.reduced(), sameInstance(b.reduced())); assertThat(b.reduced().getKeyAsString(), equalTo("test")); assertThat(b.reduced().getDocCount(), equalTo(3L)); - verify(context).consumeBucketsAndMaybeBreak(1); - verifyNoMoreInteractions(context); + assertEquals(1, buckets.get()); } public void testCompareKey() { - ReduceContext context = mock(ReduceContext.class); + AggregationReduceContext context = InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction(); DelayedBucket a = new DelayedBucket<>(mockReduce(context), context, List.of(bucket("a", 1))); DelayedBucket b = new DelayedBucket<>(mockReduce(context), context, List.of(bucket("b", 1))); if (randomBoolean()) { @@ -59,26 +57,31 @@ public class DelayedBucketTests extends ESTestCase { } public void testNonCompetitiveNotReduced() { - ReduceContext context = mock(ReduceContext.class); + AggregationReduceContext context = new AggregationReduceContext.ForFinal( + null, + null, + b -> fail("shouldn't be called"), + null, + () -> false + ); new DelayedBucket<>(mockReduce(context), context, List.of(bucket("test", 1))).nonCompetitive(); - verifyNoMoreInteractions(context); } public void testNonCompetitiveReduced() { - ReduceContext context = mock(ReduceContext.class); + AtomicInteger buckets = new AtomicInteger(); + AggregationReduceContext context = new AggregationReduceContext.ForFinal(null, null, buckets::addAndGet, null, () -> false); DelayedBucket b = new DelayedBucket<>(mockReduce(context), context, List.of(bucket("test", 1))); b.reduced(); - verify(context).consumeBucketsAndMaybeBreak(1); + assertEquals(1, buckets.get()); b.nonCompetitive(); - verify(context).consumeBucketsAndMaybeBreak(-1); - verifyNoMoreInteractions(context); + assertEquals(0, buckets.get()); } private static InternalBucket bucket(String key, long docCount) { return new StringTerms.Bucket(new BytesRef(key), docCount, InternalAggregations.EMPTY, false, 0, DocValueFormat.RAW); } - static BiFunction, ReduceContext, InternalBucket> mockReduce(ReduceContext context) { + static BiFunction, AggregationReduceContext, InternalBucket> mockReduce(AggregationReduceContext context) { return (l, c) -> { assertThat(c, sameInstance(context)); return bucket(l.get(0).getKeyAsString(), l.stream().mapToLong(Bucket::getDocCount).sum()); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/InternalAggregationsTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/InternalAggregationsTests.java index d13cfa2d1298..04b4151154c0 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/InternalAggregationsTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/InternalAggregationsTests.java @@ -43,8 +43,8 @@ public class InternalAggregationsTests extends ESTestCase { public void testReduceEmptyAggs() { List aggs = Collections.emptyList(); - InternalAggregation.ReduceContextBuilder builder = InternalAggregationTestCase.emptyReduceContextBuilder(); - InternalAggregation.ReduceContext reduceContext = randomBoolean() ? builder.forFinalReduction() : builder.forPartialReduction(); + AggregationReduceContext.Builder builder = InternalAggregationTestCase.emptyReduceContextBuilder(); + AggregationReduceContext reduceContext = randomBoolean() ? builder.forFinalReduction() : builder.forPartialReduction(); assertNull(InternalAggregations.reduce(aggs, reduceContext)); } @@ -92,7 +92,7 @@ public class InternalAggregationsTests extends ESTestCase { assertEquals(2, reducedAggs.aggregations.size()); } - private InternalAggregation.ReduceContextBuilder maxBucketReduceContext() { + private AggregationReduceContext.Builder maxBucketReduceContext() { MaxBucketPipelineAggregationBuilder maxBucketPipelineAggregationBuilder = new MaxBucketPipelineAggregationBuilder("test", "test"); PipelineAggregator.PipelineTree tree = new PipelineAggregator.PipelineTree( emptyMap(), diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/TopBucketBuilderTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/TopBucketBuilderTests.java index a86fa445bfbd..fa32a280007c 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/TopBucketBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/TopBucketBuilderTests.java @@ -11,10 +11,10 @@ package org.elasticsearch.search.aggregations; import org.apache.lucene.util.ArrayUtil; import org.apache.lucene.util.BytesRef; import org.elasticsearch.search.DocValueFormat; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation.InternalBucket; import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.test.InternalAggregationTestCase; import java.util.ArrayList; import java.util.List; @@ -23,12 +23,11 @@ import java.util.Locale; import static org.elasticsearch.search.aggregations.DelayedBucketTests.mockReduce; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; -import static org.mockito.Mockito.mock; public class TopBucketBuilderTests extends ESTestCase { public void testSizeOne() { int count = between(1, 1000); - ReduceContext context = mock(ReduceContext.class); + AggregationReduceContext context = InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction(); List nonCompetitive = new ArrayList<>(); TopBucketBuilder builder = TopBucketBuilder.build(1, BucketOrder.key(true), b -> nonCompetitive.add(b.toString())); @@ -48,7 +47,7 @@ public class TopBucketBuilderTests extends ESTestCase { public void testAllCompetitive() { int size = between(3, 1000); int count = between(1, size); - ReduceContext context = mock(ReduceContext.class); + AggregationReduceContext context = InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction(); TopBucketBuilder builder = TopBucketBuilder.build( size, BucketOrder.key(true), @@ -69,7 +68,7 @@ public class TopBucketBuilderTests extends ESTestCase { public void someNonCompetitiveTestCase(int size) { int count = between(size + 1, size * 30); - ReduceContext context = mock(ReduceContext.class); + AggregationReduceContext context = InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction(); List nonCompetitive = new ArrayList<>(); TopBucketBuilder builder = TopBucketBuilder.build( size, @@ -103,7 +102,7 @@ public class TopBucketBuilderTests extends ESTestCase { public void testHuge() { int count = between(1, 1000); - ReduceContext context = mock(ReduceContext.class); + AggregationReduceContext context = InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction(); TopBucketBuilder builder = TopBucketBuilder.build( Integer.MAX_VALUE, BucketOrder.key(true), diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/FiltersAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/FiltersAggregatorTests.java index e07362123dca..c4ab7f47b5b1 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/FiltersAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/FiltersAggregatorTests.java @@ -57,6 +57,7 @@ import org.elasticsearch.index.query.SearchExecutionContext; import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.search.aggregations.AggregationBuilder; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregator; import org.elasticsearch.search.aggregations.AggregatorTestCase; import org.elasticsearch.search.aggregations.InternalAggregation; @@ -540,7 +541,7 @@ public class FiltersAggregatorTests extends AggregatorTestCase { InternalAggregation result = aggregator.buildTopLevel(); result = result.reduce( List.of(result), - InternalAggregation.ReduceContext.forFinalReduction( + new AggregationReduceContext.ForFinal( context.bigArrays(), getMockScriptService(), b -> {}, diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilterTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilterTests.java index e5229d21b17a..445f9a9ecca4 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilterTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilterTests.java @@ -8,8 +8,8 @@ package org.elasticsearch.search.aggregations.bucket.filter; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalSingleBucketAggregationTestCase; import org.elasticsearch.search.aggregations.bucket.ParsedSingleBucketAggregation; @@ -61,7 +61,7 @@ public class InternalFilterTests extends InternalSingleBucketAggregationTestCase InternalFilter test = createTestInstance("test", randomNonNegativeLong(), sub, emptyMap()); PipelineAggregator mockPipeline = new PipelineAggregator(null, null, null) { @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { return dummy; } }; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFiltersTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFiltersTests.java index 64090b6b67c3..89ff3f07038e 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFiltersTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFiltersTests.java @@ -8,8 +8,8 @@ package org.elasticsearch.search.aggregations.bucket.filter; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.bucket.filter.InternalFilters.InternalBucket; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; @@ -124,7 +124,7 @@ public class InternalFiltersTests extends InternalMultiBucketAggregationTestCase InternalFilters test = createTestInstance("test", emptyMap(), sub); PipelineAggregator mockPipeline = new PipelineAggregator(null, null, null) { @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { return dummy; } }; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramAggregatorTests.java index e065dbdd1a12..45ae206fbefd 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramAggregatorTests.java @@ -27,9 +27,9 @@ import org.elasticsearch.index.mapper.BooleanFieldMapper; import org.elasticsearch.index.mapper.DateFieldMapper; import org.elasticsearch.index.mapper.FieldNamesFieldMapper; import org.elasticsearch.search.aggregations.AggregationBuilder; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregator; import org.elasticsearch.search.aggregations.BucketOrder; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator; import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; @@ -925,7 +925,7 @@ public class DateHistogramAggregatorTests extends DateHistogramAggregatorTestCas InternalDateHistogram result = (InternalDateHistogram) agg.buildTopLevel(); result = (InternalDateHistogram) result.reduce( List.of(result), - ReduceContext.forFinalReduction( + new AggregationReduceContext.ForFinal( context.bigArrays(), null, context.multiBucketConsumer(), diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalVariableWidthHistogramTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalVariableWidthHistogramTests.java index c8418b06c930..6ad31fc97ef7 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalVariableWidthHistogramTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalVariableWidthHistogramTests.java @@ -16,6 +16,7 @@ import org.elasticsearch.common.util.MockPageCacheRecycler; import org.elasticsearch.indices.breaker.NoneCircuitBreakerService; import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.MultiBucketConsumerService; @@ -153,7 +154,7 @@ public class InternalVariableWidthHistogramTests extends InternalMultiBucketAggr DEFAULT_MAX_BUCKETS, new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) ); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, mockScriptService, bucketConsumer, @@ -207,7 +208,7 @@ public class InternalVariableWidthHistogramTests extends InternalMultiBucketAggr DEFAULT_MAX_BUCKETS, new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) ); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, mockScriptService, bucketConsumer, @@ -297,7 +298,7 @@ public class InternalVariableWidthHistogramTests extends InternalMultiBucketAggr DEFAULT_MAX_BUCKETS, new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) ); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, mockScriptService, bucketConsumer, @@ -353,7 +354,7 @@ public class InternalVariableWidthHistogramTests extends InternalMultiBucketAggr DEFAULT_MAX_BUCKETS, new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) ); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, mockScriptService, bucketConsumer, @@ -414,7 +415,7 @@ public class InternalVariableWidthHistogramTests extends InternalMultiBucketAggr DEFAULT_MAX_BUCKETS, new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) ); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, mockScriptService, bucketConsumer, diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java index 0eb3aba58283..dccf1fc5a02d 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java @@ -77,6 +77,7 @@ import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregator; import org.elasticsearch.search.aggregations.AggregatorTestCase; import org.elasticsearch.search.aggregations.BucketOrder; @@ -1268,7 +1269,7 @@ public class TermsAggregatorTests extends AggregatorTestCase { } dir.close(); } - InternalAggregation.ReduceContext ctx = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext ctx = new AggregationReduceContext.ForFinal( new MockBigArrays(new MockPageCacheRecycler(Settings.EMPTY), new NoneCircuitBreakerService()), null, b -> {}, @@ -2197,7 +2198,7 @@ public class TermsAggregatorTests extends AggregatorTestCase { Integer.MAX_VALUE, new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) ); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, getMockScriptService(), reduceBucketConsumer, diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetricTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetricTests.java index 1e5cbf5a9519..b5c0bf3243ef 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetricTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/InternalScriptedMetricTests.java @@ -18,8 +18,8 @@ import org.elasticsearch.script.ScriptModule; import org.elasticsearch.script.ScriptService; import org.elasticsearch.script.ScriptType; import org.elasticsearch.search.aggregations.Aggregation.CommonFields; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.ParsedAggregation; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.PipelineTree; import org.elasticsearch.test.InternalAggregationTestCase; @@ -163,7 +163,7 @@ public class InternalScriptedMetricTests extends InternalAggregationTestCase false) + new AggregationReduceContext.ForFinal(null, mockScriptService(), null, PipelineTree.EMPTY, () -> false) ); } diff --git a/test/framework/src/main/java/org/elasticsearch/search/aggregations/AggregatorTestCase.java b/test/framework/src/main/java/org/elasticsearch/search/aggregations/AggregatorTestCase.java index 7b2c69355a49..415ae22809f2 100644 --- a/test/framework/src/main/java/org/elasticsearch/search/aggregations/AggregatorTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/search/aggregations/AggregatorTestCase.java @@ -106,7 +106,6 @@ import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.NestedDocuments; import org.elasticsearch.search.SearchModule; import org.elasticsearch.search.aggregations.AggregatorFactories.Builder; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.MultiBucketConsumerService.MultiBucketConsumer; import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.MetricsAggregator; @@ -581,10 +580,9 @@ public abstract class AggregatorTestCase extends ESTestCase { Collections.shuffle(aggs, random()); int r = randomIntBetween(1, toReduceSize); List toReduce = aggs.subList(0, r); - InternalAggregation.ReduceContext reduceContext = InternalAggregation.ReduceContext.forPartialReduction( + AggregationReduceContext reduceContext = new AggregationReduceContext.ForPartial( context.bigArrays(), getMockScriptService(), - () -> PipelineAggregator.PipelineTree.EMPTY, () -> false ); A reduced = (A) aggs.get(0).reduce(toReduce, reduceContext); @@ -598,7 +596,7 @@ public abstract class AggregatorTestCase extends ESTestCase { maxBucket, new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) ); - InternalAggregation.ReduceContext reduceContext = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext reduceContext = new AggregationReduceContext.ForFinal( context.bigArrays(), getMockScriptService(), reduceBucketConsumer, @@ -732,7 +730,7 @@ public abstract class AggregatorTestCase extends ESTestCase { InternalAggregation r = aggregator.buildTopLevel(); r = r.reduce( List.of(r), - ReduceContext.forFinalReduction( + new AggregationReduceContext.ForFinal( context.bigArrays(), getMockScriptService(), context.multiBucketConsumer(), @@ -1325,7 +1323,7 @@ public abstract class AggregatorTestCase extends ESTestCase { } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { aggregations.forEach(ia -> { assertThat(((InternalAggCardinalityUpperBound) ia).cardinality, equalTo(cardinality)); }); return new InternalAggCardinalityUpperBound(name, cardinality, metadata); } diff --git a/test/framework/src/main/java/org/elasticsearch/search/aggregations/bucket/AbstractSignificanceHeuristicTestCase.java b/test/framework/src/main/java/org/elasticsearch/search/aggregations/bucket/AbstractSignificanceHeuristicTestCase.java index 24ac2c14bc83..c566f8a73c18 100644 --- a/test/framework/src/main/java/org/elasticsearch/search/aggregations/bucket/AbstractSignificanceHeuristicTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/search/aggregations/bucket/AbstractSignificanceHeuristicTestCase.java @@ -19,6 +19,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.SearchModule; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.bucket.terms.InternalMappedSignificantTerms; @@ -132,7 +133,7 @@ public abstract class AbstractSignificanceHeuristicTestCase extends ESTestCase { public void testReduce() { List aggs = createInternalAggregations(); - InternalAggregation.ReduceContext context = InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction(); + AggregationReduceContext context = InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction(); SignificantTerms reducedAgg = (SignificantTerms) aggs.get(0).reduce(aggs, context); assertThat(reducedAgg.getBuckets().size(), equalTo(2)); assertThat(reducedAgg.getBuckets().get(0).getSubsetDf(), equalTo(8L)); diff --git a/test/framework/src/main/java/org/elasticsearch/test/InternalAggregationTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/InternalAggregationTestCase.java index 44f0ad22cd36..7049f7967501 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/InternalAggregationTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/InternalAggregationTestCase.java @@ -27,8 +27,8 @@ import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.SearchModule; import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.MultiBucketConsumerService; import org.elasticsearch.search.aggregations.MultiBucketConsumerService.MultiBucketConsumer; import org.elasticsearch.search.aggregations.ParsedAggregation; @@ -170,37 +170,26 @@ import static org.hamcrest.Matchers.lessThanOrEqualTo; */ public abstract class InternalAggregationTestCase extends AbstractNamedWriteableTestCase { /** - * Builds an {@link InternalAggregation.ReduceContextBuilder} that is valid but empty. + * Builds an {@link AggregationReduceContext} that is valid but empty. */ - public static InternalAggregation.ReduceContextBuilder emptyReduceContextBuilder() { + public static AggregationReduceContext.Builder emptyReduceContextBuilder() { return emptyReduceContextBuilder(PipelineTree.EMPTY); } /** - * Builds an {@link InternalAggregation.ReduceContextBuilder} that is valid and nearly + * Builds an {@link AggregationReduceContext} that is valid and nearly * empty except that it contain {@link PipelineAggregator}s. */ - public static InternalAggregation.ReduceContextBuilder emptyReduceContextBuilder(PipelineTree pipelineTree) { - return new InternalAggregation.ReduceContextBuilder() { + public static AggregationReduceContext.Builder emptyReduceContextBuilder(PipelineTree pipelineTree) { + return new AggregationReduceContext.Builder() { @Override - public InternalAggregation.ReduceContext forPartialReduction() { - return InternalAggregation.ReduceContext.forPartialReduction( - BigArrays.NON_RECYCLING_INSTANCE, - null, - () -> pipelineTree, - () -> false - ); + public AggregationReduceContext forPartialReduction() { + return new AggregationReduceContext.ForPartial(BigArrays.NON_RECYCLING_INSTANCE, null, () -> false); } @Override - public ReduceContext forFinalReduction() { - return InternalAggregation.ReduceContext.forFinalReduction( - BigArrays.NON_RECYCLING_INSTANCE, - null, - b -> {}, - pipelineTree, - () -> false - ); + public AggregationReduceContext forFinalReduction() { + return new AggregationReduceContext.ForFinal(BigArrays.NON_RECYCLING_INSTANCE, null, b -> {}, pipelineTree, () -> false); } }; } @@ -374,12 +363,7 @@ public abstract class InternalAggregationTestCase List toPartialReduce = toReduce.subList(0, r); // Sort aggs so that unmapped come last. This mimicks the behavior of InternalAggregations.reduce() toPartialReduce.sort(INTERNAL_AGG_COMPARATOR); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forPartialReduction( - bigArrays, - mockScriptService, - () -> PipelineAggregator.PipelineTree.EMPTY, - () -> false - ); + AggregationReduceContext context = new AggregationReduceContext.ForPartial(bigArrays, mockScriptService, () -> false); @SuppressWarnings("unchecked") T reduced = (T) toPartialReduce.get(0).reduce(toPartialReduce, context); int initialBucketCount = 0; @@ -404,7 +388,7 @@ public abstract class InternalAggregationTestCase DEFAULT_MAX_BUCKETS, new NoneCircuitBreakerService().getBreaker(CircuitBreaker.REQUEST) ); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, mockScriptService, bucketConsumer, diff --git a/test/framework/src/main/java/org/elasticsearch/test/InternalMultiBucketAggregationTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/InternalMultiBucketAggregationTestCase.java index 20ed2eaea0b7..45e9ce6cca9e 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/InternalMultiBucketAggregationTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/InternalMultiBucketAggregationTestCase.java @@ -10,6 +10,7 @@ package org.elasticsearch.test; import org.elasticsearch.common.util.BigArrays; import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -202,10 +203,10 @@ public abstract class InternalMultiBucketAggregationTestCase aggregations, ReduceContext reduceContext) { + public InternalBoxplot reduce(List aggregations, AggregationReduceContext reduceContext) { TDigestState merged = null; for (InternalAggregation aggregation : aggregations) { final InternalBoxplot percentiles = (InternalBoxplot) aggregation; diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/cumulativecardinality/CumulativeCardinalityPipelineAggregator.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/cumulativecardinality/CumulativeCardinalityPipelineAggregator.java index d946df4ac09e..db9e10c16720 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/cumulativecardinality/CumulativeCardinalityPipelineAggregator.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/cumulativecardinality/CumulativeCardinalityPipelineAggregator.java @@ -8,8 +8,8 @@ package org.elasticsearch.xpack.analytics.cumulativecardinality; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation; @@ -37,7 +37,7 @@ public class CumulativeCardinalityPipelineAggregator extends PipelineAggregator } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { InternalMultiBucketAggregation histo = (InternalMultiBucketAggregation) aggregation; List buckets = histo.getBuckets(); HistogramFactory factory = (HistogramFactory) histo; diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/cumulativecardinality/InternalSimpleLongValue.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/cumulativecardinality/InternalSimpleLongValue.java index fad356cae61e..69ba3acce1ff 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/cumulativecardinality/InternalSimpleLongValue.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/cumulativecardinality/InternalSimpleLongValue.java @@ -9,6 +9,7 @@ package org.elasticsearch.xpack.analytics.cumulativecardinality; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.InternalNumericMetricsAggregation; import org.elasticsearch.search.aggregations.pipeline.SimpleValue; @@ -63,7 +64,7 @@ public class InternalSimpleLongValue extends InternalNumericMetricsAggregation.S } @Override - public InternalSimpleLongValue reduce(List aggregations, ReduceContext reduceContext) { + public InternalSimpleLongValue reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException("Not supported"); } diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/movingPercentiles/MovingPercentilesPipelineAggregator.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/movingPercentiles/MovingPercentilesPipelineAggregator.java index c4859779ba55..c6b4e7e14614 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/movingPercentiles/MovingPercentilesPipelineAggregator.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/movingPercentiles/MovingPercentilesPipelineAggregator.java @@ -9,8 +9,8 @@ package org.elasticsearch.xpack.analytics.movingPercentiles; import org.HdrHistogram.DoubleHistogram; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation; @@ -41,7 +41,7 @@ public class MovingPercentilesPipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { @SuppressWarnings("unchecked") InternalMultiBucketAggregation histo = (InternalMultiBucketAggregation) aggregation; List buckets = histo.getBuckets(); diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/multiterms/InternalMultiTerms.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/multiterms/InternalMultiTerms.java index d43c15582e9c..985ba4f33900 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/multiterms/InternalMultiTerms.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/multiterms/InternalMultiTerms.java @@ -13,6 +13,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.BucketOrder; import org.elasticsearch.search.aggregations.InternalAggregation; @@ -558,7 +559,7 @@ public class InternalMultiTerms extends AbstractInternalTerms aggregations, - ReduceContext reduceContext, + AggregationReduceContext reduceContext, boolean[] needsPromotionToDouble ) { if (needsPromotionToDouble != null) { @@ -573,7 +574,7 @@ public class InternalMultiTerms extends AbstractInternalTerms aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { return reduce(aggregations, reduceContext, needsPromotionToDouble(aggregations)); } diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/normalize/NormalizePipelineAggregator.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/normalize/NormalizePipelineAggregator.java index 159e6ce572a1..edbd750cdcc5 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/normalize/NormalizePipelineAggregator.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/normalize/NormalizePipelineAggregator.java @@ -8,8 +8,8 @@ package org.elasticsearch.xpack.analytics.normalize; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; -import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; @@ -43,7 +43,7 @@ public class NormalizePipelineAggregator extends PipelineAggregator { } @Override - public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) { + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { @SuppressWarnings("unchecked") InternalMultiBucketAggregation originalAgg = (InternalMultiBucketAggregation< ?, diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/rate/InternalRate.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/rate/InternalRate.java index 4181e25a2864..5617611219aa 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/rate/InternalRate.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/rate/InternalRate.java @@ -9,6 +9,7 @@ package org.elasticsearch.xpack.analytics.rate; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.CompensatedSum; import org.elasticsearch.search.aggregations.metrics.InternalNumericMetricsAggregation; @@ -68,7 +69,7 @@ public class InternalRate extends InternalNumericMetricsAggregation.SingleValue } @Override - public InternalRate reduce(List aggregations, ReduceContext reduceContext) { + public InternalRate reduce(List aggregations, AggregationReduceContext reduceContext) { // Compute the sum of double values with Kahan summation algorithm which is more // accurate than naive summation. CompensatedSum kahanSummation = new CompensatedSum(0, 0); diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/stringstats/InternalStringStats.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/stringstats/InternalStringStats.java index e21a99fecaec..a0c4ba586670 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/stringstats/InternalStringStats.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/stringstats/InternalStringStats.java @@ -9,6 +9,7 @@ package org.elasticsearch.xpack.analytics.stringstats; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.CompensatedSum; import org.elasticsearch.xcontent.ParseField; @@ -200,7 +201,7 @@ public class InternalStringStats extends InternalAggregation { @Override @SuppressWarnings("HiddenField") - public InternalStringStats reduce(List aggregations, ReduceContext reduceContext) { + public InternalStringStats reduce(List aggregations, AggregationReduceContext reduceContext) { long count = 0; long totalLength = 0; int minLength = Integer.MAX_VALUE; diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/topmetrics/InternalTopMetrics.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/topmetrics/InternalTopMetrics.java index 4d75e35e3356..b5f7545a362f 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/topmetrics/InternalTopMetrics.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/topmetrics/InternalTopMetrics.java @@ -12,6 +12,7 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.core.Nullable; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.InternalMultiValueAggregation; import org.elasticsearch.search.sort.SortOrder; @@ -109,7 +110,7 @@ public class InternalTopMetrics extends InternalMultiValueAggregation { } @Override - public InternalTopMetrics reduce(List aggregations, ReduceContext reduceContext) { + public InternalTopMetrics reduce(List aggregations, AggregationReduceContext reduceContext) { if (false == isMapped()) { return this; } diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/InternalTTest.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/InternalTTest.java index 07cd87a630b3..d04a42d7452f 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/InternalTTest.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/InternalTTest.java @@ -10,6 +10,7 @@ package org.elasticsearch.xpack.analytics.ttest; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.InternalNumericMetricsAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -55,7 +56,7 @@ public class InternalTTest extends InternalNumericMetricsAggregation.SingleValue } @Override - public InternalTTest reduce(List aggregations, ReduceContext reduceContext) { + public InternalTTest reduce(List aggregations, AggregationReduceContext reduceContext) { TTestState reduced = state.reduce(aggregations.stream().map(a -> ((InternalTTest) a).state)); return new InternalTTest(name, reduced, format, getMetadata()); } diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/multiterms/InternalMultiTermsTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/multiterms/InternalMultiTermsTests.java index 698bdceae99f..da0abf126d57 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/multiterms/InternalMultiTermsTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/multiterms/InternalMultiTermsTests.java @@ -18,11 +18,10 @@ import org.elasticsearch.plugins.SearchPlugin; import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.BucketOrder; -import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.ParsedAggregation; -import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.test.InternalAggregationTestCase; import org.elasticsearch.xcontent.NamedXContentRegistry; import org.elasticsearch.xcontent.ParseField; @@ -371,12 +370,7 @@ public class InternalMultiTermsTests extends InternalAggregationTestCase PipelineAggregator.PipelineTree.EMPTY, - () -> false - ); + AggregationReduceContext context = new AggregationReduceContext.ForPartial(bigArrays, mockScriptService, () -> false); InternalMultiTerms result = (InternalMultiTerms) terms1.reduce(List.of(terms1, terms2), context); assertThat(result.buckets, hasSize(3)); diff --git a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchTask.java b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchTask.java index 24a92005609b..ba1e59d771c7 100644 --- a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchTask.java +++ b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchTask.java @@ -23,7 +23,7 @@ import org.elasticsearch.action.search.ShardSearchFailure; import org.elasticsearch.client.Client; import org.elasticsearch.core.TimeValue; import org.elasticsearch.search.SearchShardTarget; -import org.elasticsearch.search.aggregations.InternalAggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.tasks.TaskId; import org.elasticsearch.tasks.TaskManager; @@ -53,7 +53,7 @@ final class AsyncSearchTask extends SearchTask implements AsyncTask { private final AsyncExecutionId searchId; private final Client client; private final ThreadPool threadPool; - private final Supplier aggReduceContextSupplier; + private final Supplier aggReduceContextSupplier; private final Listener progressListener; private final Map originHeaders; @@ -95,7 +95,7 @@ final class AsyncSearchTask extends SearchTask implements AsyncTask { AsyncExecutionId searchId, Client client, ThreadPool threadPool, - Function, Supplier> aggReduceContextSupplierFactory + Function, Supplier> aggReduceContextSupplierFactory ) { super(id, type, action, () -> "async_search{" + descriptionSupplier.get() + "}", parentTaskId, taskHeaders); this.expirationTimeMillis = getStartTime() + keepAlive.getMillis(); diff --git a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportSubmitAsyncSearchAction.java b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportSubmitAsyncSearchAction.java index 53ee19492f75..df581d898295 100644 --- a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportSubmitAsyncSearchAction.java +++ b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/TransportSubmitAsyncSearchAction.java @@ -23,7 +23,7 @@ import org.elasticsearch.common.util.BigArrays; import org.elasticsearch.common.util.concurrent.ThreadContext; import org.elasticsearch.core.TimeValue; import org.elasticsearch.search.SearchService; -import org.elasticsearch.search.aggregations.InternalAggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.tasks.Task; import org.elasticsearch.tasks.TaskId; import org.elasticsearch.transport.TransportService; @@ -44,7 +44,7 @@ import static org.elasticsearch.xpack.core.ClientHelper.ASYNC_SEARCH_ORIGIN; public class TransportSubmitAsyncSearchAction extends HandledTransportAction { private final NodeClient nodeClient; - private final BiFunction, SearchRequest, InternalAggregation.ReduceContext> requestToAggReduceContextBuilder; + private final BiFunction, SearchRequest, AggregationReduceContext> requestToAggReduceContextBuilder; private final TransportSearchAction searchAction; private final ThreadContext threadContext; private final AsyncTaskIndexService store; @@ -149,8 +149,8 @@ public class TransportSubmitAsyncSearchAction extends HandledTransportAction taskHeaders) { AsyncExecutionId searchId = new AsyncExecutionId(docID, new TaskId(nodeClient.getLocalNodeId(), id)); - Function, Supplier> aggReduceContextSupplierFactory = ( - isCancelled) -> () -> requestToAggReduceContextBuilder.apply(isCancelled, request.getSearchRequest()); + Function, Supplier> aggReduceContextSupplierFactory = + isCancelled -> () -> requestToAggReduceContextBuilder.apply(isCancelled, request.getSearchRequest()); return new AsyncSearchTask( id, type, diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/categorization/InternalCategorizationAggregation.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/categorization/InternalCategorizationAggregation.java index f9d653d0abf9..c9f3a773436d 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/categorization/InternalCategorizationAggregation.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/categorization/InternalCategorizationAggregation.java @@ -14,6 +14,7 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.util.BytesRefHash; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -53,7 +54,7 @@ public class InternalCategorizationAggregation extends InternalMultiBucketAggreg return docCount; } - public Bucket reduce(BucketKey bucketKey, ReduceContext reduceContext) { + public Bucket reduce(BucketKey bucketKey, AggregationReduceContext reduceContext) { List innerAggs = new ArrayList<>(toReduce.size()); long totalDocCount = 0; for (Bucket bucket : toReduce) { @@ -335,7 +336,7 @@ public class InternalCategorizationAggregation extends InternalMultiBucketAggreg } @Override - protected Bucket reduceBucket(List buckets, ReduceContext context) { + protected Bucket reduceBucket(List buckets, AggregationReduceContext context) { throw new IllegalArgumentException("For optimization purposes, typical bucket path is not supported"); } @@ -350,7 +351,7 @@ public class InternalCategorizationAggregation extends InternalMultiBucketAggreg } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { try (CategorizationBytesRefHash hash = new CategorizationBytesRefHash(new BytesRefHash(1L, reduceContext.bigArrays()))) { CategorizationTokenTree categorizationTokenTree = new CategorizationTokenTree( maxUniqueTokens, diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/categorization/UnmappedCategorizationAggregation.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/categorization/UnmappedCategorizationAggregation.java index 1edb9560608a..0ada736a2e10 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/categorization/UnmappedCategorizationAggregation.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/categorization/UnmappedCategorizationAggregation.java @@ -7,6 +7,7 @@ package org.elasticsearch.xpack.ml.aggs.categorization; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; @@ -45,7 +46,7 @@ class UnmappedCategorizationAggregation extends InternalCategorizationAggregatio } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { return new UnmappedCategorizationAggregation( name, getRequiredSize(), diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/correlation/BucketCorrelationAggregator.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/correlation/BucketCorrelationAggregator.java index 4b40d24fcfaf..1d90f879526e 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/correlation/BucketCorrelationAggregator.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/correlation/BucketCorrelationAggregator.java @@ -9,6 +9,7 @@ package org.elasticsearch.xpack.ml.aggs.correlation; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.pipeline.InternalSimpleValue; @@ -33,7 +34,7 @@ public class BucketCorrelationAggregator extends SiblingPipelineAggregator { } @Override - public InternalAggregation doReduce(Aggregations aggregations, InternalAggregation.ReduceContext context) { + public InternalAggregation doReduce(Aggregations aggregations, AggregationReduceContext context) { CountCorrelationIndicator bucketPathValue = MlAggsHelper.extractDoubleBucketedValues(bucketsPaths()[0], aggregations) .map( doubleBucketValues -> new CountCorrelationIndicator( diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/inference/InferencePipelineAggregator.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/inference/InferencePipelineAggregator.java index 5543b480d6bb..43ac9fadf4ae 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/inference/InferencePipelineAggregator.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/inference/InferencePipelineAggregator.java @@ -8,6 +8,7 @@ package org.elasticsearch.xpack.ml.aggs.inference; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; @@ -49,8 +50,7 @@ public class InferencePipelineAggregator extends PipelineAggregator { @SuppressWarnings({ "rawtypes", "unchecked" }) @Override - public InternalAggregation reduce(InternalAggregation aggregation, InternalAggregation.ReduceContext reduceContext) { - + public InternalAggregation reduce(InternalAggregation aggregation, AggregationReduceContext reduceContext) { try (model) { InternalMultiBucketAggregation originalAgg = (InternalMultiBucketAggregation) aggregation; diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/inference/InternalInferenceAggregation.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/inference/InternalInferenceAggregation.java index 732d79a50373..59ef2cb6e8e3 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/inference/InternalInferenceAggregation.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/inference/InternalInferenceAggregation.java @@ -9,6 +9,7 @@ package org.elasticsearch.xpack.ml.aggs.inference; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; import org.elasticsearch.xpack.core.ml.inference.results.InferenceResults; @@ -44,7 +45,7 @@ public class InternalInferenceAggregation extends InternalAggregation { } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException("Reducing an inference aggregation is not supported"); } diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/kstest/BucketCountKSTestAggregator.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/kstest/BucketCountKSTestAggregator.java index 05293ac8c544..f578dd8cd34a 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/kstest/BucketCountKSTestAggregator.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/kstest/BucketCountKSTestAggregator.java @@ -12,6 +12,7 @@ import org.elasticsearch.common.Randomness; import org.elasticsearch.core.Nullable; import org.elasticsearch.core.SuppressForbidden; import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.pipeline.SiblingPipelineAggregator; @@ -230,7 +231,7 @@ public class BucketCountKSTestAggregator extends SiblingPipelineAggregator { } @Override - public InternalAggregation doReduce(Aggregations aggregations, InternalAggregation.ReduceContext context) { + public InternalAggregation doReduce(Aggregations aggregations, AggregationReduceContext context) { Optional maybeBucketsValue = extractDoubleBucketedValues(bucketsPaths()[0], aggregations).map( bucketValue -> { double[] values = new double[bucketValue.getValues().length + 1]; diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/kstest/InternalKSTestAggregation.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/kstest/InternalKSTestAggregation.java index 3378779c1557..632919bc7ff3 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/kstest/InternalKSTestAggregation.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/aggs/kstest/InternalKSTestAggregation.java @@ -9,6 +9,7 @@ package org.elasticsearch.xpack.ml.aggs.kstest; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -47,7 +48,7 @@ public class InternalKSTestAggregation extends InternalAggregation { } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException("Reducing a bucket_count_ks_test aggregation is not supported"); } diff --git a/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/RollupResponseTranslator.java b/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/RollupResponseTranslator.java index 5567755083f0..08086007ae49 100644 --- a/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/RollupResponseTranslator.java +++ b/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/RollupResponseTranslator.java @@ -16,6 +16,7 @@ import org.elasticsearch.index.IndexNotFoundException; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; @@ -73,10 +74,8 @@ public class RollupResponseTranslator { * See {@link #combineResponses(MultiSearchResponse.Item[], InternalAggregation.ReduceContext)} for more details * on the translation conventions */ - public static SearchResponse translateResponse( - MultiSearchResponse.Item[] rolledMsearch, - InternalAggregation.ReduceContext reduceContext - ) throws Exception { + public static SearchResponse translateResponse(MultiSearchResponse.Item[] rolledMsearch, AggregationReduceContext reduceContext) + throws Exception { assert rolledMsearch.length > 0; List responses = new ArrayList<>(); @@ -202,10 +201,8 @@ public class RollupResponseTranslator { * * @param msearchResponses The responses from the msearch, where the first response is the live-index response */ - public static SearchResponse combineResponses( - MultiSearchResponse.Item[] msearchResponses, - InternalAggregation.ReduceContext reduceContext - ) throws Exception { + public static SearchResponse combineResponses(MultiSearchResponse.Item[] msearchResponses, AggregationReduceContext reduceContext) + throws Exception { assert msearchResponses.length >= 2; @@ -254,7 +251,7 @@ public class RollupResponseTranslator { private static SearchResponse doCombineResponse( SearchResponse liveResponse, List rolledResponses, - InternalAggregation.ReduceContext reduceContext + AggregationReduceContext reduceContext ) { final InternalAggregations liveAggs = liveResponse != null @@ -283,7 +280,7 @@ public class RollupResponseTranslator { // which means we can use aggregation's reduce method to combine, just as if // it was a result from another shard InternalAggregations currentTree = InternalAggregations.EMPTY; - InternalAggregation.ReduceContext finalReduceContext = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext finalReduceContext = new AggregationReduceContext.ForFinal( reduceContext.bigArrays(), reduceContext.scriptService(), b -> {}, @@ -373,7 +370,6 @@ public class RollupResponseTranslator { /** * Takes an aggregation with rollup conventions and unrolls into a "normal" agg tree * - * @param rolled The rollup aggregation that we wish to unroll * @param original The unrolled, "live" aggregation (if it exists) that matches the current rolled aggregation * diff --git a/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/action/TransportRollupSearchAction.java b/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/action/TransportRollupSearchAction.java index 99e5550a3782..a05111b37d5e 100644 --- a/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/action/TransportRollupSearchAction.java +++ b/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/action/TransportRollupSearchAction.java @@ -42,13 +42,12 @@ import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.index.query.TermsQueryBuilder; import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.aggregations.AggregationBuilder; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.AggregatorFactories; -import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.histogram.HistogramAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; -import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.tasks.CancellableTask; import org.elasticsearch.tasks.Task; @@ -121,10 +120,9 @@ public class TransportRollupSearchAction extends TransportAction { - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forPartialReduction( + AggregationReduceContext context = new AggregationReduceContext.ForPartial( bigArrays, scriptService, - () -> PipelineAggregator.PipelineTree.EMPTY, ((CancellableTask) task)::isCancelled ); listener.onResponse(processResponses(rollupSearchContext, msearchResponse, context)); @@ -134,7 +132,7 @@ public class TransportRollupSearchAction extends TransportAction RollupResponseTranslator.combineResponses( failure, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ) ); assertThat(e.getMessage(), equalTo("foo")); @@ -109,7 +110,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { RuntimeException.class, () -> RollupResponseTranslator.translateResponse( failure, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ) ); assertThat(e.getMessage(), equalTo("foo")); @@ -129,7 +130,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { RuntimeException.class, () -> RollupResponseTranslator.translateResponse( failure, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ) ); assertThat(e.getMessage(), equalTo("rollup failure")); @@ -147,7 +148,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { ResourceNotFoundException.class, () -> RollupResponseTranslator.combineResponses( failure, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ) ); assertThat( @@ -202,7 +203,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { ResourceNotFoundException.class, () -> RollupResponseTranslator.combineResponses( msearch, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ) ); assertThat( @@ -227,7 +228,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { SearchResponse response = RollupResponseTranslator.translateResponse( msearch, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ); assertNotNull(response); Aggregations responseAggs = response.getAggregations(); @@ -248,7 +249,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { ResourceNotFoundException.class, () -> RollupResponseTranslator.combineResponses( msearch, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ) ); assertThat( @@ -309,7 +310,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { BigArrays bigArrays = new MockBigArrays(new MockPageCacheRecycler(Settings.EMPTY), new NoneCircuitBreakerService()); ScriptService scriptService = mock(ScriptService.class); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, scriptService, b -> {}, @@ -329,7 +330,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { MultiSearchResponse.Item missing = new MultiSearchResponse.Item(null, new IndexNotFoundException("foo")); BigArrays bigArrays = new MockBigArrays(new MockPageCacheRecycler(Settings.EMPTY), new NoneCircuitBreakerService()); ScriptService scriptService = mock(ScriptService.class); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, scriptService, b -> {}, @@ -378,7 +379,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { RuntimeException.class, () -> RollupResponseTranslator.combineResponses( msearch, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ) ); assertThat(e.getMessage(), containsString("Expected [bizzbuzz] to be a FilterAggregation")); @@ -411,7 +412,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { RuntimeException.class, () -> RollupResponseTranslator.combineResponses( msearch, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ) ); assertThat(e.getMessage(), equalTo("Expected [filter_foo] to be a FilterAggregation, but was [InternalMax]")); @@ -466,7 +467,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { SearchResponse response = RollupResponseTranslator.combineResponses( msearch, - InternalAggregation.ReduceContext.forFinalReduction(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) + new AggregationReduceContext.ForFinal(bigArrays, scriptService, b -> {}, PipelineTree.EMPTY, () -> false) ); assertNotNull(response); Aggregations responseAggs = response.getAggregations(); @@ -597,7 +598,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { BigArrays bigArrays = new MockBigArrays(new MockPageCacheRecycler(Settings.EMPTY), new NoneCircuitBreakerService()); ScriptService scriptService = mock(ScriptService.class); - InternalAggregation.ReduceContext reduceContext = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext reduceContext = new AggregationReduceContext.ForFinal( bigArrays, scriptService, b -> {}, @@ -684,7 +685,7 @@ public class RollupResponseTranslationTests extends AggregatorTestCase { // Reduce the InternalDateHistogram response so we can fill buckets BigArrays bigArrays = new MockBigArrays(new MockPageCacheRecycler(Settings.EMPTY), new NoneCircuitBreakerService()); ScriptService scriptService = mock(ScriptService.class); - InternalAggregation.ReduceContext context = InternalAggregation.ReduceContext.forFinalReduction( + AggregationReduceContext context = new AggregationReduceContext.ForFinal( bigArrays, scriptService, b -> {}, diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/action/SearchActionTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/action/SearchActionTests.java index 64a11811b7d6..7802bf5907f4 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/action/SearchActionTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/action/SearchActionTests.java @@ -45,6 +45,7 @@ import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.suggest.SuggestBuilder; import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.test.InternalAggregationTestCase; import org.elasticsearch.xpack.core.rollup.ConfigTestHelpers; import org.elasticsearch.xpack.core.rollup.RollupField; import org.elasticsearch.xpack.core.rollup.action.RollupJobCaps; @@ -686,7 +687,7 @@ public class SearchActionTests extends ESTestCase { SearchResponse r = TransportRollupSearchAction.processResponses( result, msearchResponse, - mock(InternalAggregation.ReduceContext.class) + InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction() ); assertThat(r, equalTo(response)); } @@ -748,7 +749,7 @@ public class SearchActionTests extends ESTestCase { SearchResponse r = TransportRollupSearchAction.processResponses( result, msearchResponse, - mock(InternalAggregation.ReduceContext.class) + InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction() ); assertNotNull(r); @@ -800,7 +801,11 @@ public class SearchActionTests extends ESTestCase { RuntimeException e = expectThrows( RuntimeException.class, - () -> TransportRollupSearchAction.processResponses(result, msearchResponse, mock(InternalAggregation.ReduceContext.class)) + () -> TransportRollupSearchAction.processResponses( + result, + msearchResponse, + InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction() + ) ); assertThat(e.getMessage(), equalTo("MSearch response was empty, cannot unroll RollupSearch results")); } @@ -884,7 +889,7 @@ public class SearchActionTests extends ESTestCase { SearchResponse response = TransportRollupSearchAction.processResponses( separateIndices, msearchResponse, - mock(InternalAggregation.ReduceContext.class) + InternalAggregationTestCase.emptyReduceContextBuilder().forFinalReduction() ); assertNotNull(response); diff --git a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/InternalGeoLine.java b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/InternalGeoLine.java index f2c8722dd73a..67205a3d1d26 100644 --- a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/InternalGeoLine.java +++ b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/InternalGeoLine.java @@ -10,6 +10,7 @@ import org.apache.lucene.geo.GeoEncodingUtils; import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.xcontent.XContentBuilder; @@ -92,7 +93,7 @@ public class InternalGeoLine extends InternalAggregation implements GeoShapeMetr } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { int mergedSize = 0; boolean reducedComplete = true; boolean reducedIncludeSorts = true; diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/execution/search/extractor/TestMultiValueAggregation.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/execution/search/extractor/TestMultiValueAggregation.java index 2d806e3e6f11..6ed253bc3df3 100644 --- a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/execution/search/extractor/TestMultiValueAggregation.java +++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/execution/search/extractor/TestMultiValueAggregation.java @@ -7,6 +7,7 @@ package org.elasticsearch.xpack.sql.execution.search.extractor; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.InternalNumericMetricsAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -42,7 +43,7 @@ class TestMultiValueAggregation extends InternalNumericMetricsAggregation.MultiV } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException(); } diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/execution/search/extractor/TestSingleValueAggregation.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/execution/search/extractor/TestSingleValueAggregation.java index ea63c797cac7..dc974184d868 100644 --- a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/execution/search/extractor/TestSingleValueAggregation.java +++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/execution/search/extractor/TestSingleValueAggregation.java @@ -7,6 +7,7 @@ package org.elasticsearch.xpack.sql.execution.search.extractor; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.xcontent.XContentBuilder; @@ -37,7 +38,7 @@ public class TestSingleValueAggregation extends InternalAggregation { } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException(); } diff --git a/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/pivot/AggregationResultUtilsTests.java b/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/pivot/AggregationResultUtilsTests.java index 339b368371c7..35fcab503d39 100644 --- a/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/pivot/AggregationResultUtilsTests.java +++ b/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/pivot/AggregationResultUtilsTests.java @@ -13,6 +13,7 @@ import org.elasticsearch.script.Script; import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.AggregationBuilders; +import org.elasticsearch.search.aggregations.AggregationReduceContext; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.PipelineAggregationBuilder; import org.elasticsearch.search.aggregations.PipelineAggregatorBuilders; @@ -147,7 +148,7 @@ public class AggregationResultUtilsTests extends ESTestCase { } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException(); } @@ -197,7 +198,7 @@ public class AggregationResultUtilsTests extends ESTestCase { } @Override - public InternalAggregation reduce(List aggregations, ReduceContext reduceContext) { + public InternalAggregation reduce(List aggregations, AggregationReduceContext reduceContext) { throw new UnsupportedOperationException(); }