Skip to content

Commit 77b87a1

Browse files
authored
Plumb ValuesSourceRegistry through to QuerySearchContext (#51710)
1 parent af5f319 commit 77b87a1

File tree

38 files changed

+184
-188
lines changed

38 files changed

+184
-188
lines changed

server/src/main/java/org/elasticsearch/index/IndexModule.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.elasticsearch.indices.mapper.MapperRegistry;
6262
import org.elasticsearch.plugins.IndexStorePlugin;
6363
import org.elasticsearch.script.ScriptService;
64+
import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry;
6465
import org.elasticsearch.threadpool.ThreadPool;
6566

6667
import java.io.IOException;
@@ -381,23 +382,21 @@ public static Type defaultStoreType(final boolean allowMmap) {
381382
}
382383
}
383384

384-
public IndexService newIndexService(
385-
IndexService.IndexCreationContext indexCreationContext,
386-
NodeEnvironment environment,
387-
NamedXContentRegistry xContentRegistry,
388-
IndexService.ShardStoreDeleter shardStoreDeleter,
389-
CircuitBreakerService circuitBreakerService,
390-
BigArrays bigArrays,
391-
ThreadPool threadPool,
392-
ScriptService scriptService,
393-
ClusterService clusterService,
394-
Client client,
395-
IndicesQueryCache indicesQueryCache,
396-
MapperRegistry mapperRegistry,
397-
IndicesFieldDataCache indicesFieldDataCache,
398-
NamedWriteableRegistry namedWriteableRegistry,
399-
BooleanSupplier idFieldDataEnabled)
400-
throws IOException {
385+
public IndexService newIndexService(IndexService.IndexCreationContext indexCreationContext,
386+
NodeEnvironment environment,
387+
NamedXContentRegistry xContentRegistry,
388+
IndexService.ShardStoreDeleter shardStoreDeleter,
389+
CircuitBreakerService circuitBreakerService,
390+
BigArrays bigArrays,
391+
ThreadPool threadPool,
392+
ScriptService scriptService,
393+
ClusterService clusterService,
394+
Client client,
395+
IndicesQueryCache indicesQueryCache,
396+
MapperRegistry mapperRegistry,
397+
IndicesFieldDataCache indicesFieldDataCache,
398+
NamedWriteableRegistry namedWriteableRegistry,
399+
BooleanSupplier idFieldDataEnabled, ValuesSourceRegistry valuesSourceRegistry) throws IOException {
401400
final IndexEventListener eventListener = freeze();
402401
Function<IndexService, CheckedFunction<DirectoryReader, DirectoryReader, IOException>> readerWrapperFactory =
403402
indexReaderWrapper.get() == null ? (shard) -> null : indexReaderWrapper.get();
@@ -424,7 +423,7 @@ public IndexService newIndexService(
424423
new SimilarityService(indexSettings, scriptService, similarities), shardStoreDeleter, indexAnalyzers,
425424
engineFactory, circuitBreakerService, bigArrays, threadPool, scriptService, clusterService, client, queryCache,
426425
directoryFactory, eventListener, readerWrapperFactory, mapperRegistry, indicesFieldDataCache, searchOperationListeners,
427-
indexOperationListeners, namedWriteableRegistry, idFieldDataEnabled);
426+
indexOperationListeners, namedWriteableRegistry, idFieldDataEnabled, valuesSourceRegistry);
428427
success = true;
429428
return indexService;
430429
} finally {

server/src/main/java/org/elasticsearch/index/IndexService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import org.elasticsearch.indices.mapper.MapperRegistry;
8181
import org.elasticsearch.plugins.IndexStorePlugin;
8282
import org.elasticsearch.script.ScriptService;
83+
import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry;
8384
import org.elasticsearch.threadpool.ThreadPool;
8485

8586
import java.io.Closeable;
@@ -142,6 +143,7 @@ public class IndexService extends AbstractIndexComponent implements IndicesClust
142143
private final Client client;
143144
private final CircuitBreakerService circuitBreakerService;
144145
private Supplier<Sort> indexSortSupplier;
146+
private ValuesSourceRegistry valuesSourceRegistry;
145147

146148
public IndexService(
147149
IndexSettings indexSettings,
@@ -166,13 +168,15 @@ public IndexService(
166168
List<SearchOperationListener> searchOperationListeners,
167169
List<IndexingOperationListener> indexingOperationListeners,
168170
NamedWriteableRegistry namedWriteableRegistry,
169-
BooleanSupplier idFieldDataEnabled) {
171+
BooleanSupplier idFieldDataEnabled,
172+
ValuesSourceRegistry valuesSourceRegistry) {
170173
super(indexSettings);
171174
this.indexSettings = indexSettings;
172175
this.xContentRegistry = xContentRegistry;
173176
this.similarityService = similarityService;
174177
this.namedWriteableRegistry = namedWriteableRegistry;
175178
this.circuitBreakerService = circuitBreakerService;
179+
this.valuesSourceRegistry = valuesSourceRegistry;
176180
if (needsMapperService(indexSettings, indexCreationContext)) {
177181
assert indexAnalyzers != null;
178182
this.mapperService = new MapperService(indexSettings, indexAnalyzers, xContentRegistry, similarityService, mapperRegistry,
@@ -568,7 +572,7 @@ public QueryShardContext newQueryShardContext(int shardId, IndexSearcher searche
568572
return new QueryShardContext(
569573
shardId, indexSettings, bigArrays, indexCache.bitsetFilterCache(), indexFieldData::getForField, mapperService(),
570574
similarityService(), scriptService, xContentRegistry, namedWriteableRegistry, client, searcher, nowInMillis, clusterAlias,
571-
indexNameMatcher);
575+
indexNameMatcher, valuesSourceRegistry);
572576
}
573577

574578
/**

server/src/main/java/org/elasticsearch/index/query/QueryShardContext.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import org.elasticsearch.script.ScriptContext;
5757
import org.elasticsearch.script.ScriptFactory;
5858
import org.elasticsearch.script.ScriptService;
59+
import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry;
5960
import org.elasticsearch.search.lookup.SearchLookup;
6061
import org.elasticsearch.transport.RemoteClusterAware;
6162

@@ -97,6 +98,7 @@ public class QueryShardContext extends QueryRewriteContext {
9798
private boolean allowUnmappedFields;
9899
private boolean mapUnmappedFieldAsString;
99100
private NestedScope nestedScope;
101+
private ValuesSourceRegistry valuesSourceRegistry;
100102

101103
public QueryShardContext(int shardId,
102104
IndexSettings indexSettings,
@@ -112,18 +114,19 @@ public QueryShardContext(int shardId,
112114
IndexSearcher searcher,
113115
LongSupplier nowInMillis,
114116
String clusterAlias,
115-
Predicate<String> indexNameMatcher) {
117+
Predicate<String> indexNameMatcher,
118+
ValuesSourceRegistry valuesSourceRegistry) {
116119
this(shardId, indexSettings, bigArrays, bitsetFilterCache, indexFieldDataLookup, mapperService, similarityService,
117120
scriptService, xContentRegistry, namedWriteableRegistry, client, searcher, nowInMillis, indexNameMatcher,
118121
new Index(RemoteClusterAware.buildRemoteIndexName(clusterAlias, indexSettings.getIndex().getName()),
119-
indexSettings.getIndex().getUUID()));
122+
indexSettings.getIndex().getUUID()), valuesSourceRegistry);
120123
}
121124

122125
public QueryShardContext(QueryShardContext source) {
123126
this(source.shardId, source.indexSettings, source.bigArrays, source.bitsetFilterCache, source.indexFieldDataService,
124127
source.mapperService, source.similarityService, source.scriptService, source.getXContentRegistry(),
125128
source.getWriteableRegistry(), source.client, source.searcher, source.nowInMillis, source.indexNameMatcher,
126-
source.fullyQualifiedIndex);
129+
source.fullyQualifiedIndex, source.valuesSourceRegistry);
127130
}
128131

129132
private QueryShardContext(int shardId,
@@ -140,7 +143,8 @@ private QueryShardContext(int shardId,
140143
IndexSearcher searcher,
141144
LongSupplier nowInMillis,
142145
Predicate<String> indexNameMatcher,
143-
Index fullyQualifiedIndex) {
146+
Index fullyQualifiedIndex,
147+
ValuesSourceRegistry valuesSourceRegistry) {
144148
super(xContentRegistry, namedWriteableRegistry, client, nowInMillis);
145149
this.shardId = shardId;
146150
this.similarityService = similarityService;
@@ -155,6 +159,7 @@ private QueryShardContext(int shardId,
155159
this.searcher = searcher;
156160
this.indexNameMatcher = indexNameMatcher;
157161
this.fullyQualifiedIndex = fullyQualifiedIndex;
162+
this.valuesSourceRegistry = valuesSourceRegistry;
158163
}
159164

160165
private void reset() {
@@ -249,6 +254,10 @@ public Analyzer getSearchQuoteAnalyzer(MappedFieldType fieldType) {
249254
return getMapperService().searchQuoteAnalyzer();
250255
}
251256

257+
public ValuesSourceRegistry getValuesSourceRegistry() {
258+
return valuesSourceRegistry;
259+
}
260+
252261
public void setAllowUnmappedFields(boolean allowUnmappedFields) {
253262
this.allowUnmappedFields = allowUnmappedFields;
254263
}

server/src/main/java/org/elasticsearch/indices/IndicesService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@
126126
import org.elasticsearch.plugins.PluginsService;
127127
import org.elasticsearch.repositories.RepositoriesService;
128128
import org.elasticsearch.script.ScriptService;
129+
import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry;
129130
import org.elasticsearch.search.internal.AliasFilter;
130131
import org.elasticsearch.search.internal.SearchContext;
131132
import org.elasticsearch.search.internal.ShardSearchRequest;
@@ -225,6 +226,7 @@ public class IndicesService extends AbstractLifecycleComponent
225226
private final EsThreadPoolExecutor danglingIndicesThreadPoolExecutor;
226227
private final Set<Index> danglingIndicesToWrite = Sets.newConcurrentHashSet();
227228
private final boolean nodeWriteDanglingIndicesInfo;
229+
private ValuesSourceRegistry valuesSourceRegistry;
228230

229231

230232
@Override
@@ -239,12 +241,13 @@ public IndicesService(Settings settings, PluginsService pluginsService, NodeEnvi
239241
IndexScopedSettings indexScopedSettings, CircuitBreakerService circuitBreakerService, BigArrays bigArrays,
240242
ScriptService scriptService, ClusterService clusterService, Client client, MetaStateService metaStateService,
241243
Collection<Function<IndexSettings, Optional<EngineFactory>>> engineFactoryProviders,
242-
Map<String, IndexStorePlugin.DirectoryFactory> directoryFactories) {
244+
Map<String, IndexStorePlugin.DirectoryFactory> directoryFactories, ValuesSourceRegistry valuesSourceRegistry) {
243245
this.settings = settings;
244246
this.threadPool = threadPool;
245247
this.pluginsService = pluginsService;
246248
this.nodeEnv = nodeEnv;
247249
this.xContentRegistry = xContentRegistry;
250+
this.valuesSourceRegistry = valuesSourceRegistry;
248251
this.shardsClosedTimeout = settings.getAsTime(INDICES_SHARDS_CLOSED_TIMEOUT, new TimeValue(1, TimeUnit.DAYS));
249252
this.analysisRegistry = analysisRegistry;
250253
this.indexNameExpressionResolver = indexNameExpressionResolver;
@@ -609,7 +612,8 @@ private synchronized IndexService createIndexService(IndexService.IndexCreationC
609612
mapperRegistry,
610613
indicesFieldDataCache,
611614
namedWriteableRegistry,
612-
this::isIdFieldDataEnabled
615+
this::isIdFieldDataEnabled,
616+
valuesSourceRegistry
613617
);
614618
}
615619

server/src/main/java/org/elasticsearch/node/Node.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,8 @@ protected Node(
447447
new IndicesService(settings, pluginsService, nodeEnvironment, xContentRegistry, analysisModule.getAnalysisRegistry(),
448448
clusterModule.getIndexNameExpressionResolver(), indicesModule.getMapperRegistry(), namedWriteableRegistry,
449449
threadPool, settingsModule.getIndexScopedSettings(), circuitBreakerService, bigArrays, scriptModule.getScriptService(),
450-
clusterService, client, metaStateService, engineFactoryProviders, indexStoreFactories);
450+
clusterService, client, metaStateService, engineFactoryProviders, indexStoreFactories,
451+
searchModule.getValuesSourceRegistry());
451452

452453
final AliasValidator aliasValidator = new AliasValidator();
453454

server/src/main/java/org/elasticsearch/search/SearchModule.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ public class SearchModule {
287287
private final Settings settings;
288288
private final List<NamedWriteableRegistry.Entry> namedWriteables = new ArrayList<>();
289289
private final List<NamedXContentRegistry.Entry> namedXContents = new ArrayList<>();
290+
private ValuesSourceRegistry valuesSourceRegistry;
290291

291292
/**
292293
* Constructs a new SearchModule object
@@ -298,6 +299,7 @@ public class SearchModule {
298299
*/
299300
public SearchModule(Settings settings, List<SearchPlugin> plugins) {
300301
this.settings = settings;
302+
this.valuesSourceRegistry = new ValuesSourceRegistry();
301303
registerSuggesters(plugins);
302304
highlighters = setupHighlighters(settings, plugins);
303305
registerScoreFunctions(plugins);
@@ -322,6 +324,10 @@ public List<NamedXContentRegistry.Entry> getNamedXContents() {
322324
return namedXContents;
323325
}
324326

327+
public ValuesSourceRegistry getValuesSourceRegistry() {
328+
return valuesSourceRegistry;
329+
}
330+
325331
/**
326332
* Returns the {@link Highlighter} registry
327333
*/
@@ -447,7 +453,7 @@ private void registerAggregation(AggregationSpec spec) {
447453
}
448454
Consumer<ValuesSourceRegistry> register = spec.getAggregatorRegistrar();
449455
if (register != null) {
450-
register.accept(ValuesSourceRegistry.getInstance());
456+
register.accept(this.valuesSourceRegistry);
451457
}
452458
}
453459

server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramAggregationBuilder.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import java.util.List;
4646
import java.util.Map;
4747
import java.util.Objects;
48-
import java.util.concurrent.atomic.AtomicBoolean;
4948

5049
/**
5150
* A builder for histograms on numeric fields. This builder can operate on either base numeric fields, or numeric range fields. IP range
@@ -88,11 +87,8 @@ public static HistogramAggregationBuilder parse(String aggregationName, XContent
8887
return PARSER.parse(parser, new HistogramAggregationBuilder(aggregationName), null);
8988
}
9089

91-
private static AtomicBoolean wasRegistered = new AtomicBoolean(false);
9290
public static void registerAggregators(ValuesSourceRegistry valuesSourceRegistry) {
93-
if (wasRegistered.compareAndSet(false, true)) {
94-
HistogramAggregatorFactory.registerAggregators(valuesSourceRegistry);
95-
}
91+
HistogramAggregatorFactory.registerAggregators(valuesSourceRegistry);
9692
}
9793

9894
private double interval;

server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramAggregatorFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ protected Aggregator doCreateInternal(ValuesSource valuesSource,
127127
return asMultiBucketAggregator(this, searchContext, parent);
128128
}
129129

130-
AggregatorSupplier aggregatorSupplier = ValuesSourceRegistry.getInstance().getAggregator(config.valueSourceType(),
130+
AggregatorSupplier aggregatorSupplier = queryShardContext.getValuesSourceRegistry().getAggregator(config.valueSourceType(),
131131
HistogramAggregationBuilder.NAME);
132132
if (aggregatorSupplier instanceof HistogramAggregatorSupplier == false) {
133133
throw new AggregationExecutionException("Registry miss-match - expected HistogramAggregatorSupplier, found [" +

server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregationBuilder.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import java.util.List;
5050
import java.util.Map;
5151
import java.util.Objects;
52-
import java.util.concurrent.atomic.AtomicBoolean;
5352

5453
public class TermsAggregationBuilder extends ValuesSourceAggregationBuilder<TermsAggregationBuilder>
5554
implements MultiBucketAggregationBuilder {
@@ -102,11 +101,8 @@ public static AggregationBuilder parse(String aggregationName, XContentParser pa
102101
return PARSER.parse(parser, new TermsAggregationBuilder(aggregationName), null);
103102
}
104103

105-
private static AtomicBoolean wasRegistered = new AtomicBoolean(false);
106104
public static void registerAggregators(ValuesSourceRegistry valuesSourceRegistry) {
107-
if (wasRegistered.compareAndSet(false, true)) {
108-
TermsAggregatorFactory.registerAggregators(valuesSourceRegistry);
109-
}
105+
TermsAggregatorFactory.registerAggregators(valuesSourceRegistry);
110106
}
111107

112108
private BucketOrder order = BucketOrder.compound(BucketOrder.count(false)); // automatically adds tie-breaker key asc order

server/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ protected Aggregator doCreateInternal(ValuesSource valuesSource,
249249
return asMultiBucketAggregator(this, searchContext, parent);
250250
}
251251

252-
AggregatorSupplier aggregatorSupplier = ValuesSourceRegistry.getInstance().getAggregator(config.valueSourceType(),
252+
AggregatorSupplier aggregatorSupplier = queryShardContext.getValuesSourceRegistry().getAggregator(config.valueSourceType(),
253253
TermsAggregationBuilder.NAME);
254254
if (aggregatorSupplier instanceof TermsAggregatorSupplier == false) {
255255
throw new AggregationExecutionException("Registry miss-match - expected TermsAggregatorSupplier, found [" +

0 commit comments

Comments
 (0)