Skip to content

Commit c227554

Browse files
authored
Remove SearchContext from constructing aggregations (#64953)
This replaces the `SearchContext` passed to the ctor of `Aggregation`s with `AggregationContext`. It ends up adding a fairly large number of methods to `AggregationContext` but in exchange it shows a path to removing a few methods from `SearchContext`. That seems nice! It also gives us an accurate inventory of "all of the stuff" that aggregations use to build and run.
1 parent 22c129a commit c227554

File tree

193 files changed

+1003
-1089
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

193 files changed

+1003
-1089
lines changed

modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/MatrixStatsAggregator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929
import org.elasticsearch.search.aggregations.LeafBucketCollector;
3030
import org.elasticsearch.search.aggregations.LeafBucketCollectorBase;
3131
import org.elasticsearch.search.aggregations.metrics.MetricsAggregator;
32+
import org.elasticsearch.search.aggregations.support.AggregationContext;
3233
import org.elasticsearch.search.aggregations.support.ArrayValuesSource.NumericArrayValuesSource;
3334
import org.elasticsearch.search.aggregations.support.ValuesSource;
34-
import org.elasticsearch.search.internal.SearchContext;
3535

3636
import java.io.IOException;
3737
import java.util.Map;
@@ -46,7 +46,7 @@ final class MatrixStatsAggregator extends MetricsAggregator {
4646
/** array of descriptive stats, per shard, needed to compute the correlation */
4747
ObjectArray<RunningStats> stats;
4848

49-
MatrixStatsAggregator(String name, Map<String, ValuesSource.Numeric> valuesSources, SearchContext context,
49+
MatrixStatsAggregator(String name, Map<String, ValuesSource.Numeric> valuesSources, AggregationContext context,
5050
Aggregator parent, MultiValueMode multiValueMode, Map<String,Object> metadata) throws IOException {
5151
super(name, context, parent, metadata);
5252
if (valuesSources != null && !valuesSources.isEmpty()) {

modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/MatrixStatsAggregatorFactory.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.elasticsearch.search.aggregations.support.ArrayValuesSourceAggregatorFactory;
2929
import org.elasticsearch.search.aggregations.support.ValuesSource;
3030
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
31-
import org.elasticsearch.search.internal.SearchContext;
3231

3332
import java.io.IOException;
3433
import java.util.HashMap;
@@ -50,16 +49,12 @@ final class MatrixStatsAggregatorFactory extends ArrayValuesSourceAggregatorFact
5049
}
5150

5251
@Override
53-
protected Aggregator createUnmapped(SearchContext searchContext,
54-
Aggregator parent,
55-
Map<String, Object> metadata)
56-
throws IOException {
57-
return new MatrixStatsAggregator(name, null, searchContext, parent, multiValueMode, metadata);
52+
protected Aggregator createUnmapped(Aggregator parent, Map<String, Object> metadata) throws IOException {
53+
return new MatrixStatsAggregator(name, null, context, parent, multiValueMode, metadata);
5854
}
5955

6056
@Override
6157
protected Aggregator doCreateInternal(Map<String, ValuesSource> valuesSources,
62-
SearchContext searchContext,
6358
Aggregator parent,
6459
CardinalityUpperBound cardinality,
6560
Map<String, Object> metadata) throws IOException {
@@ -72,6 +67,6 @@ protected Aggregator doCreateInternal(Map<String, ValuesSource> valuesSources,
7267
// TODO: There must be a better option than this.
7368
typedValuesSources.put(entry.getKey(), (ValuesSource.Numeric) entry.getValue());
7469
}
75-
return new MatrixStatsAggregator(name, typedValuesSources, searchContext, parent, multiValueMode, metadata);
70+
return new MatrixStatsAggregator(name, typedValuesSources, context, parent, multiValueMode, metadata);
7671
}
7772
}

modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregatorFactory.java

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.elasticsearch.search.aggregations.AggregatorFactories;
2424
import org.elasticsearch.search.aggregations.AggregatorFactory;
2525
import org.elasticsearch.search.aggregations.CardinalityUpperBound;
26-
import org.elasticsearch.search.internal.SearchContext;
2726

2827
import java.io.IOException;
2928
import java.util.HashMap;
@@ -43,10 +42,8 @@ public ArrayValuesSourceAggregatorFactory(String name, Map<String, ValuesSourceC
4342
}
4443

4544
@Override
46-
public Aggregator createInternal(SearchContext searchContext,
47-
Aggregator parent,
48-
CardinalityUpperBound cardinality,
49-
Map<String, Object> metadata) throws IOException {
45+
public Aggregator createInternal(Aggregator parent, CardinalityUpperBound cardinality, Map<String, Object> metadata)
46+
throws IOException {
5047
HashMap<String, ValuesSource> valuesSources = new HashMap<>();
5148

5249
for (Map.Entry<String, ValuesSourceConfig> config : configs.entrySet()) {
@@ -56,18 +53,16 @@ public Aggregator createInternal(SearchContext searchContext,
5653
}
5754
}
5855
if (valuesSources.isEmpty()) {
59-
return createUnmapped(searchContext, parent, metadata);
56+
return createUnmapped(parent, metadata);
6057
}
61-
return doCreateInternal(valuesSources, searchContext, parent, cardinality, metadata);
58+
return doCreateInternal(valuesSources, parent, cardinality, metadata);
6259
}
6360

6461
/**
6562
* Create the {@linkplain Aggregator} when none of the configured
6663
* fields can be resolved to a {@link ValuesSource}.
6764
*/
68-
protected abstract Aggregator createUnmapped(SearchContext searchContext,
69-
Aggregator parent,
70-
Map<String, Object> metadata) throws IOException;
65+
protected abstract Aggregator createUnmapped(Aggregator parent, Map<String, Object> metadata) throws IOException;
7166

7267
/**
7368
* Create the {@linkplain Aggregator} when any of the configured
@@ -77,10 +72,11 @@ protected abstract Aggregator createUnmapped(SearchContext searchContext,
7772
* that the {@link Aggregator} created by this method
7873
* will be asked to collect.
7974
*/
80-
protected abstract Aggregator doCreateInternal(Map<String, ValuesSource> valuesSources,
81-
SearchContext searchContext,
82-
Aggregator parent,
83-
CardinalityUpperBound cardinality,
84-
Map<String, Object> metadata) throws IOException;
75+
protected abstract Aggregator doCreateInternal(
76+
Map<String, ValuesSource> valuesSources,
77+
Aggregator parent,
78+
CardinalityUpperBound cardinality,
79+
Map<String, Object> metadata
80+
) throws IOException;
8581

8682
}

modules/parent-join/src/main/java/org/elasticsearch/join/aggregations/ChildrenAggregatorFactory.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.elasticsearch.search.aggregations.support.ValuesSource.Bytes.WithOrdinals;
3333
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory;
3434
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
35-
import org.elasticsearch.search.internal.SearchContext;
3635

3736
import java.io.IOException;
3837
import java.util.Map;
@@ -59,8 +58,8 @@ public ChildrenAggregatorFactory(String name,
5958
}
6059

6160
@Override
62-
protected Aggregator createUnmapped(SearchContext searchContext, Aggregator parent, Map<String, Object> metadata) throws IOException {
63-
return new NonCollectingAggregator(name, searchContext, parent, factories, metadata) {
61+
protected Aggregator createUnmapped(Aggregator parent, Map<String, Object> metadata) throws IOException {
62+
return new NonCollectingAggregator(name, context, parent, factories, metadata) {
6463
@Override
6564
public InternalAggregation buildEmptyAggregation() {
6665
return new InternalChildren(name, 0, buildEmptySubAggregations(), metadata());
@@ -69,18 +68,16 @@ public InternalAggregation buildEmptyAggregation() {
6968
}
7069

7170
@Override
72-
protected Aggregator doCreateInternal(SearchContext searchContext, Aggregator parent,
73-
CardinalityUpperBound cardinality,
74-
Map<String, Object> metadata) throws IOException {
75-
71+
protected Aggregator doCreateInternal(Aggregator parent, CardinalityUpperBound cardinality, Map<String, Object> metadata)
72+
throws IOException {
7673
ValuesSource rawValuesSource = config.getValuesSource();
7774
if (rawValuesSource instanceof WithOrdinals == false) {
7875
throw new AggregationExecutionException("ValuesSource type " + rawValuesSource.toString() +
7976
"is not supported for aggregation " + this.name());
8077
}
8178
WithOrdinals valuesSource = (WithOrdinals) rawValuesSource;
82-
long maxOrd = valuesSource.globalMaxOrd(searchContext.searcher());
83-
return new ParentToChildrenAggregator(name, factories, searchContext, parent, childFilter,
79+
long maxOrd = valuesSource.globalMaxOrd(context.searcher());
80+
return new ParentToChildrenAggregator(name, factories, context, parent, childFilter,
8481
parentFilter, valuesSource, maxOrd, cardinality, metadata);
8582
}
8683

modules/parent-join/src/main/java/org/elasticsearch/join/aggregations/ChildrenToParentAggregator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
import org.elasticsearch.search.aggregations.CardinalityUpperBound;
2626
import org.elasticsearch.search.aggregations.InternalAggregation;
2727
import org.elasticsearch.search.aggregations.bucket.BucketsAggregator;
28+
import org.elasticsearch.search.aggregations.support.AggregationContext;
2829
import org.elasticsearch.search.aggregations.support.ValuesSource;
29-
import org.elasticsearch.search.internal.SearchContext;
3030

3131
import java.io.IOException;
3232
import java.util.Map;
@@ -39,7 +39,7 @@ public class ChildrenToParentAggregator extends ParentJoinAggregator {
3939
static final ParseField TYPE_FIELD = new ParseField("type");
4040

4141
public ChildrenToParentAggregator(String name, AggregatorFactories factories,
42-
SearchContext context, Aggregator parent, Query childFilter,
42+
AggregationContext context, Aggregator parent, Query childFilter,
4343
Query parentFilter, ValuesSource.Bytes.WithOrdinals valuesSource,
4444
long maxOrd, CardinalityUpperBound cardinality, Map<String, Object> metadata) throws IOException {
4545
super(name, factories, context, parent, childFilter, parentFilter, valuesSource, maxOrd, cardinality, metadata);

modules/parent-join/src/main/java/org/elasticsearch/join/aggregations/ParentAggregatorFactory.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.elasticsearch.search.aggregations.support.ValuesSource.Bytes.WithOrdinals;
3333
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory;
3434
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
35-
import org.elasticsearch.search.internal.SearchContext;
3635

3736
import java.io.IOException;
3837
import java.util.Map;
@@ -59,8 +58,8 @@ public ParentAggregatorFactory(String name,
5958
}
6059

6160
@Override
62-
protected Aggregator createUnmapped(SearchContext searchContext, Aggregator parent, Map<String, Object> metadata) throws IOException {
63-
return new NonCollectingAggregator(name, searchContext, parent, factories, metadata) {
61+
protected Aggregator createUnmapped(Aggregator parent, Map<String, Object> metadata) throws IOException {
62+
return new NonCollectingAggregator(name, context, parent, factories, metadata) {
6463
@Override
6564
public InternalAggregation buildEmptyAggregation() {
6665
return new InternalParent(name, 0, buildEmptySubAggregations(), metadata());
@@ -69,18 +68,16 @@ public InternalAggregation buildEmptyAggregation() {
6968
}
7069

7170
@Override
72-
protected Aggregator doCreateInternal(SearchContext searchContext, Aggregator children,
73-
CardinalityUpperBound cardinality,
74-
Map<String, Object> metadata) throws IOException {
75-
71+
protected Aggregator doCreateInternal(Aggregator children, CardinalityUpperBound cardinality, Map<String, Object> metadata)
72+
throws IOException {
7673
ValuesSource rawValuesSource = config.getValuesSource();
7774
if (rawValuesSource instanceof WithOrdinals == false) {
7875
throw new AggregationExecutionException("ValuesSource type " + rawValuesSource.toString() +
7976
"is not supported for aggregation " + this.name());
8077
}
8178
WithOrdinals valuesSource = (WithOrdinals) rawValuesSource;
82-
long maxOrd = valuesSource.globalMaxOrd(searchContext.searcher());
83-
return new ChildrenToParentAggregator(name, factories, searchContext, children, childFilter,
79+
long maxOrd = valuesSource.globalMaxOrd(context.searcher());
80+
return new ChildrenToParentAggregator(name, factories, context, children, childFilter,
8481
parentFilter, valuesSource, maxOrd, cardinality, metadata);
8582
}
8683

modules/parent-join/src/main/java/org/elasticsearch/join/aggregations/ParentJoinAggregator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@
4040
import org.elasticsearch.search.aggregations.bucket.BucketsAggregator;
4141
import org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator;
4242
import org.elasticsearch.search.aggregations.bucket.terms.LongKeyedBucketOrds;
43+
import org.elasticsearch.search.aggregations.support.AggregationContext;
4344
import org.elasticsearch.search.aggregations.support.ValuesSource;
44-
import org.elasticsearch.search.internal.SearchContext;
4545

4646
import java.io.IOException;
4747
import java.util.Map;
@@ -63,7 +63,7 @@ public abstract class ParentJoinAggregator extends BucketsAggregator implements
6363

6464
public ParentJoinAggregator(String name,
6565
AggregatorFactories factories,
66-
SearchContext context,
66+
AggregationContext context,
6767
Aggregator parent,
6868
Query inFilter,
6969
Query outFilter,

modules/parent-join/src/main/java/org/elasticsearch/join/aggregations/ParentToChildrenAggregator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
import org.elasticsearch.search.aggregations.AggregatorFactories;
2525
import org.elasticsearch.search.aggregations.CardinalityUpperBound;
2626
import org.elasticsearch.search.aggregations.InternalAggregation;
27+
import org.elasticsearch.search.aggregations.support.AggregationContext;
2728
import org.elasticsearch.search.aggregations.support.ValuesSource;
28-
import org.elasticsearch.search.internal.SearchContext;
2929

3030
import java.io.IOException;
3131
import java.util.Map;
@@ -35,7 +35,7 @@ public class ParentToChildrenAggregator extends ParentJoinAggregator {
3535
static final ParseField TYPE_FIELD = new ParseField("type");
3636

3737
public ParentToChildrenAggregator(String name, AggregatorFactories factories,
38-
SearchContext context, Aggregator parent, Query childFilter,
38+
AggregationContext context, Aggregator parent, Query childFilter,
3939
Query parentFilter, ValuesSource.Bytes.WithOrdinals valuesSource,
4040
long maxOrd, CardinalityUpperBound cardinality, Map<String, Object> metadata) throws IOException {
4141
super(name, factories, context, parent, parentFilter, childFilter, valuesSource, maxOrd, cardinality, metadata);

server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
import org.elasticsearch.search.builder.SearchSourceBuilder;
6868
import org.elasticsearch.search.fetch.FetchSubPhase;
6969
import org.elasticsearch.search.fetch.FetchSubPhaseProcessor;
70-
import org.elasticsearch.search.internal.SearchContext;
7170
import org.elasticsearch.test.ESIntegTestCase;
7271

7372
import java.io.IOException;
@@ -504,10 +503,8 @@ protected AggregatorFactory doBuild(AggregationContext context,
504503
AggregatorFactories.Builder subFactoriesBuilder) throws IOException {
505504
return new AggregatorFactory(name, context, parent, subFactoriesBuilder, metadata) {
506505
@Override
507-
protected Aggregator createInternal(SearchContext searchContext,
508-
Aggregator parent,
509-
CardinalityUpperBound cardinality,
510-
Map<String, Object> metadata) throws IOException {
506+
protected Aggregator createInternal(Aggregator parent, CardinalityUpperBound cardinality, Map<String, Object> metadata)
507+
throws IOException {
511508
return new TestAggregator(name, parent);
512509
}
513510
};

server/src/main/java/org/elasticsearch/common/util/BigArrays.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ public BigArrays withCircuitBreaking() {
430430
return this.circuitBreakingInstance;
431431
}
432432

433-
public CircuitBreakerService breakerService() {
433+
public CircuitBreakerService breakerService() { // TODO this feels like it is for tests but it has escaped
434434
return this.circuitBreakingInstance.breakerService;
435435
}
436436

0 commit comments

Comments
 (0)