diff --git a/server/src/main/java/org/elasticsearch/action/ActionModule.java b/server/src/main/java/org/elasticsearch/action/ActionModule.java index 211adffba5ec8..e8cf3d782e22a 100644 --- a/server/src/main/java/org/elasticsearch/action/ActionModule.java +++ b/server/src/main/java/org/elasticsearch/action/ActionModule.java @@ -942,7 +942,7 @@ public void initRestHandlers(Supplier nodesInCluster, Predicate< registerHandler.accept(new RestBulkAction(settings, clusterSettings, bulkService)); registerHandler.accept(new RestUpdateAction()); - registerHandler.accept(new RestSearchAction(restController.getSearchUsageHolder(), clusterSupportsFeature)); + registerHandler.accept(new RestSearchAction(restController.getSearchUsageHolder(), clusterSupportsFeature, settings)); registerHandler.accept(new RestSearchScrollAction()); registerHandler.accept(new RestClearScrollAction()); registerHandler.accept(new RestOpenPointInTimeAction()); diff --git a/server/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java b/server/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java index 5eda47bc32354..a31640fab8ebd 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java @@ -16,6 +16,7 @@ import org.elasticsearch.action.support.IndicesOptions; import org.elasticsearch.client.internal.node.NodeClient; import org.elasticsearch.common.Strings; +import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.Booleans; import org.elasticsearch.core.Nullable; import org.elasticsearch.features.NodeFeature; @@ -66,10 +67,16 @@ public class RestSearchAction extends BaseRestHandler { private final SearchUsageHolder searchUsageHolder; private final Predicate clusterSupportsFeature; + private final Settings settings; public RestSearchAction(SearchUsageHolder searchUsageHolder, Predicate clusterSupportsFeature) { + this(searchUsageHolder, clusterSupportsFeature, null); + } + + public RestSearchAction(SearchUsageHolder searchUsageHolder, Predicate clusterSupportsFeature, Settings settings) { this.searchUsageHolder = searchUsageHolder; this.clusterSupportsFeature = clusterSupportsFeature; + this.settings = settings; } @Override @@ -101,6 +108,12 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC // access the BwC param, but just drop it // this might be set by old clients request.param("min_compatible_shard_node"); + + if (settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false)) { + // accept but drop project_routing param until fully supported + request.param("project_routing"); + } + /* * We have to pull out the call to `source().size(size)` because * _update_by_query and _delete_by_query uses this same parsing diff --git a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearch.java b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearch.java index 456e4602ea487..869b27262b52d 100644 --- a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearch.java +++ b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearch.java @@ -55,7 +55,7 @@ public List getRestHandlers( Predicate clusterSupportsFeature ) { return Arrays.asList( - new RestSubmitAsyncSearchAction(restController.getSearchUsageHolder(), clusterSupportsFeature), + new RestSubmitAsyncSearchAction(restController.getSearchUsageHolder(), clusterSupportsFeature, settings), new RestGetAsyncSearchAction(), new RestGetAsyncStatusAction(), new RestDeleteAsyncSearchAction() diff --git a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/RestSubmitAsyncSearchAction.java b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/RestSubmitAsyncSearchAction.java index 952febd46c34c..39f2539dbd791 100644 --- a/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/RestSubmitAsyncSearchAction.java +++ b/x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/RestSubmitAsyncSearchAction.java @@ -7,6 +7,7 @@ package org.elasticsearch.xpack.search; import org.elasticsearch.client.internal.node.NodeClient; +import org.elasticsearch.common.settings.Settings; import org.elasticsearch.features.NodeFeature; import org.elasticsearch.rest.BaseRestHandler; import org.elasticsearch.rest.RestRequest; @@ -37,10 +38,20 @@ public final class RestSubmitAsyncSearchAction extends BaseRestHandler { private final SearchUsageHolder searchUsageHolder; private final Predicate clusterSupportsFeature; + private final Settings settings; public RestSubmitAsyncSearchAction(SearchUsageHolder searchUsageHolder, Predicate clusterSupportsFeature) { + this(searchUsageHolder, clusterSupportsFeature, null); + } + + public RestSubmitAsyncSearchAction( + SearchUsageHolder searchUsageHolder, + Predicate clusterSupportsFeature, + Settings settings + ) { this.searchUsageHolder = searchUsageHolder; this.clusterSupportsFeature = clusterSupportsFeature; + this.settings = settings; } @Override @@ -59,6 +70,12 @@ protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient cli client.threadPool().getThreadContext().setErrorTraceTransportHeader(request); } SubmitAsyncSearchRequest submit = new SubmitAsyncSearchRequest(); + + if (settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false)) { + // accept but drop project_routing param until fully supported + request.param("project_routing"); + } + IntConsumer setSize = size -> submit.getSearchRequest().source().size(size); // for simplicity, we share parsing with ordinary search. That means a couple of unsupported parameters, like scroll // and pre_filter_shard_size get set to the search request although the REST spec don't list