Browse Source

Make async search project aware (MP-1823)

This updates `CoordinatorRewriteContextProvider` to use `ProjectState`
(instead of `ClusterState`) and enables the async_search YAML tests
Tim Vernum 10 months ago
parent
commit
fff5ca2048

+ 6 - 6
server/src/main/java/org/elasticsearch/index/query/CoordinatorRewriteContextProvider.java

@@ -10,7 +10,7 @@
 package org.elasticsearch.index.query;
 
 import org.elasticsearch.client.internal.Client;
-import org.elasticsearch.cluster.ClusterState;
+import org.elasticsearch.cluster.ProjectState;
 import org.elasticsearch.core.Nullable;
 import org.elasticsearch.index.Index;
 import org.elasticsearch.index.mapper.DateFieldMapper;
@@ -26,27 +26,27 @@ public class CoordinatorRewriteContextProvider {
     private final XContentParserConfiguration parserConfig;
     private final Client client;
     private final LongSupplier nowInMillis;
-    private final Supplier<ClusterState> clusterStateSupplier;
+    private final Supplier<ProjectState> projectStateSupplier;
     private final Function<Index, DateFieldRangeInfo> mappingSupplier;
 
     public CoordinatorRewriteContextProvider(
         XContentParserConfiguration parserConfig,
         Client client,
         LongSupplier nowInMillis,
-        Supplier<ClusterState> clusterStateSupplier,
+        Supplier<ProjectState> projectStateSupplier,
         Function<Index, DateFieldRangeInfo> mappingSupplier
     ) {
         this.parserConfig = parserConfig;
         this.client = client;
         this.nowInMillis = nowInMillis;
-        this.clusterStateSupplier = clusterStateSupplier;
+        this.projectStateSupplier = projectStateSupplier;
         this.mappingSupplier = mappingSupplier;
     }
 
     @Nullable
     public CoordinatorRewriteContext getCoordinatorRewriteContext(Index index) {
-        var clusterState = clusterStateSupplier.get();
-        var indexMetadata = clusterState.metadata().getProject().index(index);
+        var projectState = projectStateSupplier.get();
+        var indexMetadata = projectState.metadata().index(index);
 
         if (indexMetadata == null) {
             return null;

+ 5 - 1
server/src/main/java/org/elasticsearch/indices/IndicesService.java

@@ -40,6 +40,7 @@ import org.elasticsearch.cluster.metadata.IndexMetadata;
 import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
 import org.elasticsearch.cluster.metadata.ProjectMetadata;
 import org.elasticsearch.cluster.node.DiscoveryNode;
+import org.elasticsearch.cluster.project.ProjectResolver;
 import org.elasticsearch.cluster.routing.RecoverySource;
 import org.elasticsearch.cluster.routing.ShardRouting;
 import org.elasticsearch.cluster.service.ClusterService;
@@ -227,6 +228,7 @@ public class IndicesService extends AbstractLifecycleComponent
     private final BigArrays bigArrays;
     private final ScriptService scriptService;
     private final ClusterService clusterService;
+    private final ProjectResolver projectResolver;
     private final Client client;
     private final FeatureService featureService;
     private volatile Map<String, IndexService> indices = Map.of();
@@ -298,6 +300,7 @@ public class IndicesService extends AbstractLifecycleComponent
         this.bigArrays = builder.bigArrays;
         this.scriptService = builder.scriptService;
         this.clusterService = builder.clusterService;
+        this.projectResolver = builder.projectResolver;
         this.client = builder.client;
         this.featureService = builder.featureService;
         this.idFieldDataEnabled = INDICES_ID_FIELD_DATA_ENABLED_SETTING.get(clusterService.getSettings());
@@ -1775,11 +1778,12 @@ public class IndicesService extends AbstractLifecycleComponent
     }
 
     public CoordinatorRewriteContextProvider getCoordinatorRewriteContextProvider(LongSupplier nowInMillis) {
+        final var projectId = projectResolver.getProjectId();
         return new CoordinatorRewriteContextProvider(
             parserConfig,
             client,
             nowInMillis,
-            clusterService::state,
+            () -> clusterService.state().projectState(projectId),
             this::getTimestampFieldTypeInfo
         );
     }

+ 8 - 0
server/src/main/java/org/elasticsearch/indices/IndicesServiceBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.indices;
 
 import org.elasticsearch.client.internal.Client;
 import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
+import org.elasticsearch.cluster.project.ProjectResolver;
 import org.elasticsearch.cluster.service.ClusterService;
 import org.elasticsearch.common.CheckedBiConsumer;
 import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
@@ -62,6 +63,7 @@ public class IndicesServiceBuilder {
     BigArrays bigArrays;
     ScriptService scriptService;
     ClusterService clusterService;
+    ProjectResolver projectResolver;
     Client client;
     FeatureService featureService;
     MetaStateService metaStateService;
@@ -147,6 +149,11 @@ public class IndicesServiceBuilder {
         return this;
     }
 
+    public IndicesServiceBuilder projectResolver(ProjectResolver projectResolver) {
+        this.projectResolver = projectResolver;
+        return this;
+    }
+
     public IndicesServiceBuilder client(Client client) {
         this.client = client;
         return this;
@@ -203,6 +210,7 @@ public class IndicesServiceBuilder {
         Objects.requireNonNull(bigArrays);
         Objects.requireNonNull(scriptService);
         Objects.requireNonNull(clusterService);
+        Objects.requireNonNull(projectResolver);
         Objects.requireNonNull(client);
         Objects.requireNonNull(featureService);
         Objects.requireNonNull(metaStateService);

+ 1 - 0
server/src/main/java/org/elasticsearch/node/NodeConstruction.java

@@ -824,6 +824,7 @@ class NodeConstruction {
             .bigArrays(bigArrays)
             .scriptService(scriptService)
             .clusterService(clusterService)
+            .projectResolver(projectResolver)
             .client(client)
             .featureService(featureService)
             .metaStateService(metaStateService)

+ 3 - 3
server/src/test/java/org/elasticsearch/action/search/CanMatchPreFilterSearchPhaseTests.java

@@ -541,7 +541,7 @@ public class CanMatchPreFilterSearchPhaseTests extends ESTestCase {
             parserConfig(),
             mock(Client.class),
             System::currentTimeMillis,
-            () -> finalState,
+            () -> finalState.projectState(),
             (index) -> null
         );
 
@@ -1150,7 +1150,7 @@ public class CanMatchPreFilterSearchPhaseTests extends ESTestCase {
             parserConfig(),
             mock(Client.class),
             System::currentTimeMillis,
-            () -> finalState,
+            () -> finalState.projectState(),
             (index) -> null
         );
 
@@ -1538,7 +1538,7 @@ public class CanMatchPreFilterSearchPhaseTests extends ESTestCase {
                 XContentParserConfiguration.EMPTY,
                 mock(Client.class),
                 System::currentTimeMillis,
-                () -> clusterState,
+                () -> clusterState.projectState(),
                 fields::get
             );
         }

+ 1 - 0
server/src/test/java/org/elasticsearch/snapshots/SnapshotResiliencyTests.java

@@ -2245,6 +2245,7 @@ public class SnapshotResiliencyTests extends ESTestCase {
                     .bigArrays(bigArrays)
                     .scriptService(scriptService)
                     .clusterService(clusterService)
+                    .projectResolver(DefaultProjectResolver.INSTANCE)
                     .client(client)
                     .featureService(new FeatureService(List.of()))
                     .metaStateService(new MetaStateService(nodeEnv, namedXContentRegistry))

+ 0 - 2
x-pack/qa/multi-project/xpack-rest-tests-with-multiple-projects/build.gradle

@@ -29,8 +29,6 @@ tasks.named("yamlRestTest").configure {
     '^analytics/moving_percentiles/*',
     '^analytics/top_metrics/*',
     '^analytics/usage/*',
-    '^async_search/10_basic/*',
-    '^async_search/20-with-poin-in-time/*',
     '^constant_keyword/10_basic/*',
     '^data_streams/10_data_stream_resolvability/*',
     '^deprecation/10_basic/*',