Skip to content

Commit 0d1e67d

Browse files
authored
Single instance of the IndexNameExpressionResolver (#52596)
This commit modifies the codebase so that our production code uses a single instance of the IndexNameExpressionResolver class. This change is being made in preparation for allowing name expression resolution to be augmented by a plugin. In order to remove some instances of IndexNameExpressionResolver, the single instance is added as a parameter of Plugin#createComponents and PersistentTaskPlugin#getPersistentTasksExecutor.
1 parent 4c98d0c commit 0d1e67d

File tree

70 files changed

+267
-159
lines changed

Some content is hidden

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

70 files changed

+267
-159
lines changed

modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/CommonAnalysisPlugin.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
import org.apache.lucene.util.SetOnce;
115115
import org.elasticsearch.Version;
116116
import org.elasticsearch.client.Client;
117+
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
117118
import org.elasticsearch.cluster.service.ClusterService;
118119
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
119120
import org.elasticsearch.common.logging.DeprecationLogger;
@@ -162,7 +163,8 @@ public class CommonAnalysisPlugin extends Plugin implements AnalysisPlugin, Scri
162163
public Collection<Object> createComponents(Client client, ClusterService clusterService, ThreadPool threadPool,
163164
ResourceWatcherService resourceWatcherService, ScriptService scriptService,
164165
NamedXContentRegistry xContentRegistry, Environment environment,
165-
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry) {
166+
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry,
167+
IndexNameExpressionResolver expressionResolver) {
166168
this.scriptService.set(scriptService);
167169
return Collections.emptyList();
168170
}

modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/PredicateTokenScriptFilterTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public <FactoryType> FactoryType compile(Script script, ScriptContext<FactoryTyp
7171
};
7272

7373
CommonAnalysisPlugin plugin = new CommonAnalysisPlugin();
74-
plugin.createComponents(null, null, null, null, scriptService, null, null, null, null);
74+
plugin.createComponents(null, null, null, null, scriptService, null, null, null, null, null);
7575
AnalysisModule module
7676
= new AnalysisModule(TestEnvironment.newEnvironment(settings), Collections.singletonList(plugin));
7777

modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/ScriptedConditionTokenFilterTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public <FactoryType> FactoryType compile(Script script, ScriptContext<FactoryTyp
7171
};
7272

7373
CommonAnalysisPlugin plugin = new CommonAnalysisPlugin();
74-
plugin.createComponents(null, null, null, null, scriptService, null, null, null, null);
74+
plugin.createComponents(null, null, null, null, scriptService, null, null, null, null, null);
7575
AnalysisModule module
7676
= new AnalysisModule(TestEnvironment.newEnvironment(settings), Collections.singletonList(plugin));
7777

modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ public ScriptEngine getScriptEngine(Settings settings, Collection<ScriptContext<
114114
public Collection<Object> createComponents(Client client, ClusterService clusterService, ThreadPool threadPool,
115115
ResourceWatcherService resourceWatcherService, ScriptService scriptService,
116116
NamedXContentRegistry xContentRegistry, Environment environment,
117-
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry) {
117+
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry,
118+
IndexNameExpressionResolver expressionResolver) {
118119
// this is a hack to bind the painless script engine in guice (all components are added to guice), so that
119120
// the painless context api. this is a temporary measure until transport actions do no require guice
120121
return Collections.singletonList(painlessScriptEngine.get());

modules/reindex/src/main/java/org/elasticsearch/index/reindex/ReindexPlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ public List<RestHandler> getRestHandlers(Settings settings, RestController restC
8484
public Collection<Object> createComponents(Client client, ClusterService clusterService, ThreadPool threadPool,
8585
ResourceWatcherService resourceWatcherService, ScriptService scriptService,
8686
NamedXContentRegistry xContentRegistry, Environment environment,
87-
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry) {
87+
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry,
88+
IndexNameExpressionResolver expressionResolver) {
8889
return Collections.singletonList(new ReindexSslConfig(environment.settings(), environment, resourceWatcherService));
8990
}
9091

modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexFromRemoteWithAuthTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.elasticsearch.action.support.ActionFilterChain;
3232
import org.elasticsearch.action.support.WriteRequest.RefreshPolicy;
3333
import org.elasticsearch.client.Client;
34+
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
3435
import org.elasticsearch.cluster.service.ClusterService;
3536
import org.elasticsearch.common.bytes.BytesArray;
3637
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
@@ -151,7 +152,8 @@ public static class TestPlugin extends Plugin implements ActionPlugin {
151152
public Collection<Object> createComponents(Client client, ClusterService clusterService, ThreadPool threadPool,
152153
ResourceWatcherService resourceWatcherService, ScriptService scriptService,
153154
NamedXContentRegistry xContentRegistry, Environment environment,
154-
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry) {
155+
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry,
156+
IndexNameExpressionResolver expressionResolver) {
155157
testFilter.set(new ReindexFromRemoteWithAuthTests.TestFilter(threadPool));
156158
return Collections.emptyList();
157159
}

modules/systemd/src/main/java/org/elasticsearch/systemd/SystemdPlugin.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.logging.log4j.Logger;
2424
import org.elasticsearch.Build;
2525
import org.elasticsearch.client.Client;
26+
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
2627
import org.elasticsearch.cluster.service.ClusterService;
2728
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
2829
import org.elasticsearch.common.unit.TimeValue;
@@ -88,7 +89,8 @@ public Collection<Object> createComponents(
8889
final NamedXContentRegistry xContentRegistry,
8990
final Environment environment,
9091
final NodeEnvironment nodeEnvironment,
91-
final NamedWriteableRegistry namedWriteableRegistry) {
92+
final NamedWriteableRegistry namedWriteableRegistry,
93+
final IndexNameExpressionResolver expressionResolver) {
9294
if (enabled) {
9395
/*
9496
* Since we have set the service type to notify, by default systemd will wait up to sixty seconds for the process to send the

modules/systemd/src/test/java/org/elasticsearch/systemd/SystemdPluginTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,28 +61,28 @@ public class SystemdPluginTests extends ESTestCase {
6161

6262
public void testIsEnabled() {
6363
final SystemdPlugin plugin = new SystemdPlugin(false, randomPackageBuildType, Boolean.TRUE.toString());
64-
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null);
64+
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null);
6565
assertTrue(plugin.isEnabled());
6666
assertNotNull(plugin.extender);
6767
}
6868

6969
public void testIsNotPackageDistribution() {
7070
final SystemdPlugin plugin = new SystemdPlugin(false, randomNonPackageBuildType, Boolean.TRUE.toString());
71-
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null);
71+
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null);
7272
assertFalse(plugin.isEnabled());
7373
assertNull(plugin.extender);
7474
}
7575

7676
public void testIsImplicitlyNotEnabled() {
7777
final SystemdPlugin plugin = new SystemdPlugin(false, randomPackageBuildType, null);
78-
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null);
78+
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null);
7979
assertFalse(plugin.isEnabled());
8080
assertNull(plugin.extender);
8181
}
8282

8383
public void testIsExplicitlyNotEnabled() {
8484
final SystemdPlugin plugin = new SystemdPlugin(false, randomPackageBuildType, Boolean.FALSE.toString());
85-
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null);
85+
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null);
8686
assertFalse(plugin.isEnabled());
8787
assertNull(plugin.extender);
8888
}
@@ -181,7 +181,7 @@ int sd_notify(final int unset_environment, final String state) {
181181
}
182182

183183
};
184-
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null);
184+
plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null);
185185
if (Boolean.TRUE.toString().equals(esSDNotify)) {
186186
assertNotNull(plugin.extender);
187187
} else {

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.apache.lucene.util.SetOnce;
3131
import org.elasticsearch.Version;
3232
import org.elasticsearch.client.Client;
33+
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
3334
import org.elasticsearch.cluster.service.ClusterService;
3435
import org.elasticsearch.common.CheckedFunction;
3536
import org.elasticsearch.common.TriFunction;
@@ -129,6 +130,7 @@ public final class IndexModule {
129130
private final SetOnce<BiFunction<IndexSettings, IndicesQueryCache, QueryCache>> forceQueryCacheProvider = new SetOnce<>();
130131
private final List<SearchOperationListener> searchOperationListeners = new ArrayList<>();
131132
private final List<IndexingOperationListener> indexOperationListeners = new ArrayList<>();
133+
private final IndexNameExpressionResolver expressionResolver;
132134
private final AtomicBoolean frozen = new AtomicBoolean(false);
133135
private final BooleanSupplier allowExpensiveQueries;
134136

@@ -146,14 +148,16 @@ public IndexModule(
146148
final AnalysisRegistry analysisRegistry,
147149
final EngineFactory engineFactory,
148150
final Map<String, IndexStorePlugin.DirectoryFactory> directoryFactories,
149-
final BooleanSupplier allowExpensiveQueries) {
151+
final BooleanSupplier allowExpensiveQueries,
152+
final IndexNameExpressionResolver expressionResolver) {
150153
this.indexSettings = indexSettings;
151154
this.analysisRegistry = analysisRegistry;
152155
this.engineFactory = Objects.requireNonNull(engineFactory);
153156
this.searchOperationListeners.add(new SearchSlowLog(indexSettings));
154157
this.indexOperationListeners.add(new IndexingSlowLog(indexSettings));
155158
this.directoryFactories = Collections.unmodifiableMap(directoryFactories);
156159
this.allowExpensiveQueries = allowExpensiveQueries;
160+
this.expressionResolver = expressionResolver;
157161
}
158162

159163
/**
@@ -427,7 +431,7 @@ public IndexService newIndexService(
427431
new SimilarityService(indexSettings, scriptService, similarities), shardStoreDeleter, indexAnalyzers,
428432
engineFactory, circuitBreakerService, bigArrays, threadPool, scriptService, clusterService, client, queryCache,
429433
directoryFactory, eventListener, readerWrapperFactory, mapperRegistry, indicesFieldDataCache, searchOperationListeners,
430-
indexOperationListeners, namedWriteableRegistry, idFieldDataEnabled, allowExpensiveQueries);
434+
indexOperationListeners, namedWriteableRegistry, idFieldDataEnabled, allowExpensiveQueries, expressionResolver);
431435
success = true;
432436
return indexService;
433437
} finally {

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.elasticsearch.Assertions;
3131
import org.elasticsearch.client.Client;
3232
import org.elasticsearch.cluster.metadata.IndexMetaData;
33+
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
3334
import org.elasticsearch.cluster.routing.ShardRouting;
3435
import org.elasticsearch.cluster.service.ClusterService;
3536
import org.elasticsearch.common.CheckedFunction;
@@ -142,6 +143,7 @@ public class IndexService extends AbstractIndexComponent implements IndicesClust
142143
private final ClusterService clusterService;
143144
private final Client client;
144145
private final CircuitBreakerService circuitBreakerService;
146+
private final IndexNameExpressionResolver expressionResolver;
145147
private Supplier<Sort> indexSortSupplier;
146148

147149
public IndexService(
@@ -168,14 +170,16 @@ public IndexService(
168170
List<IndexingOperationListener> indexingOperationListeners,
169171
NamedWriteableRegistry namedWriteableRegistry,
170172
BooleanSupplier idFieldDataEnabled,
171-
BooleanSupplier allowExpensiveQueries) {
173+
BooleanSupplier allowExpensiveQueries,
174+
IndexNameExpressionResolver expressionResolver) {
172175
super(indexSettings);
173176
this.allowExpensiveQueries = allowExpensiveQueries;
174177
this.indexSettings = indexSettings;
175178
this.xContentRegistry = xContentRegistry;
176179
this.similarityService = similarityService;
177180
this.namedWriteableRegistry = namedWriteableRegistry;
178181
this.circuitBreakerService = circuitBreakerService;
182+
this.expressionResolver = expressionResolver;
179183
if (needsMapperService(indexSettings, indexCreationContext)) {
180184
assert indexAnalyzers != null;
181185
this.mapperService = new MapperService(indexSettings, indexAnalyzers, xContentRegistry, similarityService, mapperRegistry,
@@ -567,7 +571,8 @@ public IndexSettings getIndexSettings() {
567571
* {@link IndexReader}-specific optimizations, such as rewriting containing range queries.
568572
*/
569573
public QueryShardContext newQueryShardContext(int shardId, IndexSearcher searcher, LongSupplier nowInMillis, String clusterAlias) {
570-
SearchIndexNameMatcher indexNameMatcher = new SearchIndexNameMatcher(index().getName(), clusterAlias, clusterService);
574+
final SearchIndexNameMatcher indexNameMatcher =
575+
new SearchIndexNameMatcher(index().getName(), clusterAlias, clusterService, expressionResolver);
571576
return new QueryShardContext(
572577
shardId, indexSettings, bigArrays, indexCache.bitsetFilterCache(), indexFieldData::getForField, mapperService(),
573578
similarityService(), scriptService, xContentRegistry, namedWriteableRegistry, client, searcher, nowInMillis, clusterAlias,

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,12 @@ public class SearchIndexNameMatcher implements Predicate<String> {
4646
*/
4747
public SearchIndexNameMatcher(String indexName,
4848
String clusterAlias,
49-
ClusterService clusterService) {
49+
ClusterService clusterService,
50+
IndexNameExpressionResolver expressionResolver) {
5051
this.indexName = indexName;
5152
this.clusterAlias = RemoteClusterAware.LOCAL_CLUSTER_GROUP_KEY.equals(clusterAlias) ? null : clusterAlias;
5253
this.clusterService = clusterService;
53-
this.expressionResolver = new IndexNameExpressionResolver();
54+
this.expressionResolver = expressionResolver;
5455
}
5556

5657
/**

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ private synchronized IndexService createIndexService(IndexService.IndexCreationC
592592
indexCreationContext);
593593

594594
final IndexModule indexModule = new IndexModule(idxSettings, analysisRegistry, getEngineFactory(idxSettings),
595-
directoryFactories, () -> allowExpensiveQueries);
595+
directoryFactories, () -> allowExpensiveQueries, indexNameExpressionResolver);
596596
for (IndexingOperationListener operationListener : indexingOperationListeners) {
597597
indexModule.addIndexOperationListener(operationListener);
598598
}
@@ -662,7 +662,7 @@ private EngineFactory getEngineFactory(final IndexSettings idxSettings) {
662662
public synchronized MapperService createIndexMapperService(IndexMetaData indexMetaData) throws IOException {
663663
final IndexSettings idxSettings = new IndexSettings(indexMetaData, this.settings, indexScopedSettings);
664664
final IndexModule indexModule = new IndexModule(idxSettings, analysisRegistry, getEngineFactory(idxSettings),
665-
directoryFactories, () -> allowExpensiveQueries);
665+
directoryFactories, () -> allowExpensiveQueries, indexNameExpressionResolver);
666666
pluginsService.onIndexModule(indexModule);
667667
return indexModule.newIndexMapperService(xContentRegistry, mapperRegistry, scriptService);
668668
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ protected Node(
467467
Collection<Object> pluginComponents = pluginsService.filterPlugins(Plugin.class).stream()
468468
.flatMap(p -> p.createComponents(client, clusterService, threadPool, resourceWatcherService,
469469
scriptModule.getScriptService(), xContentRegistry, environment, nodeEnvironment,
470-
namedWriteableRegistry).stream())
470+
namedWriteableRegistry, clusterModule.getIndexNameExpressionResolver()).stream())
471471
.collect(Collectors.toList());
472472

473473
ActionModule actionModule = new ActionModule(settings, clusterModule.getIndexNameExpressionResolver(),
@@ -533,7 +533,8 @@ protected Node(
533533

534534
final List<PersistentTasksExecutor<?>> tasksExecutors = pluginsService
535535
.filterPlugins(PersistentTaskPlugin.class).stream()
536-
.map(p -> p.getPersistentTasksExecutor(clusterService, threadPool, client, settingsModule))
536+
.map(p -> p.getPersistentTasksExecutor(clusterService, threadPool, client, settingsModule,
537+
clusterModule.getIndexNameExpressionResolver()))
537538
.flatMap(List::stream)
538539
.collect(toList());
539540

server/src/main/java/org/elasticsearch/plugins/PersistentTaskPlugin.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.elasticsearch.plugins;
2020

2121
import org.elasticsearch.client.Client;
22+
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
2223
import org.elasticsearch.cluster.service.ClusterService;
2324
import org.elasticsearch.common.settings.SettingsModule;
2425
import org.elasticsearch.persistent.PersistentTasksExecutor;
@@ -38,7 +39,8 @@ public interface PersistentTaskPlugin {
3839
default List<PersistentTasksExecutor<?>> getPersistentTasksExecutor(ClusterService clusterService,
3940
ThreadPool threadPool,
4041
Client client,
41-
SettingsModule settingsModule) {
42+
SettingsModule settingsModule,
43+
IndexNameExpressionResolver expressionResolver) {
4244
return Collections.emptyList();
4345
}
4446

0 commit comments

Comments
 (0)