From 972f34e4e387252ab31231a7cddce7267e62126c Mon Sep 17 00:00:00 2001 From: Pawan Kartik Date: Mon, 29 Sep 2025 11:53:21 +0100 Subject: [PATCH 1/6] `ccs_minimize_roundtrips` should default to `true` for async search for CPS MRT defaults to `true` for _search and `false` for _async_search. However, we'd want it to default to `true` for both for CPS. Fulfills CPS requirement S2D18. --- .../mustache/RestSearchTemplateAction.java | 4 ++- .../AbstractBulkByQueryRestHandler.java | 10 ++++++- .../action/search/TransportSearchAction.java | 4 +++ .../rest/action/search/RestSearchAction.java | 29 +++++++++++++++---- .../search/RestSubmitAsyncSearchAction.java | 15 ++++++++-- .../fleet/rest/RestFleetSearchAction.java | 11 ++++++- .../rollup/rest/RestRollupSearchAction.java | 4 ++- 7 files changed, 66 insertions(+), 11 deletions(-) diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java index 72e58b651e486..eb6005d2fb2ac 100644 --- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java +++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.Predicate; @@ -73,7 +74,8 @@ public RestChannelConsumer prepareRequest(RestRequest request, NodeClient client request, null, clusterSupportsFeature, - size -> searchRequest.source().size(size) + size -> searchRequest.source().size(size), + Optional.empty() ); // Creates the search template request diff --git a/modules/reindex/src/main/java/org/elasticsearch/reindex/AbstractBulkByQueryRestHandler.java b/modules/reindex/src/main/java/org/elasticsearch/reindex/AbstractBulkByQueryRestHandler.java index 095d119bf2719..36dcc30986e8f 100644 --- a/modules/reindex/src/main/java/org/elasticsearch/reindex/AbstractBulkByQueryRestHandler.java +++ b/modules/reindex/src/main/java/org/elasticsearch/reindex/AbstractBulkByQueryRestHandler.java @@ -26,6 +26,7 @@ import java.io.IOException; import java.util.Map; +import java.util.Optional; import java.util.function.Consumer; import java.util.function.Predicate; @@ -52,7 +53,14 @@ protected void parseInternalRequest( SearchRequest searchRequest = internal.getSearchRequest(); try (XContentParser parser = extractRequestSpecificFields(restRequest, bodyConsumers)) { - RestSearchAction.parseSearchRequest(searchRequest, restRequest, parser, clusterSupportsFeature, size -> failOnSizeSpecified()); + RestSearchAction.parseSearchRequest( + searchRequest, + restRequest, + parser, + clusterSupportsFeature, + size -> failOnSizeSpecified(), + Optional.empty() + ); } searchRequest.source().size(restRequest.paramAsInt("scroll_size", searchRequest.source().size())); diff --git a/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java b/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java index fd14f54371a5e..7f371f6a9cf81 100644 --- a/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java +++ b/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java @@ -353,6 +353,10 @@ private void executeRequest( Function, SearchPhaseProvider> searchPhaseProvider, boolean collectSearchTelemetry ) { + if (forceConnectTimeoutSecs != null) { + original.setCcsMinimizeRoundtrips(true); + } + final long relativeStartNanos = System.nanoTime(); final SearchTimeProvider timeProvider = new SearchTimeProvider( original.getOrCreateAbsoluteStartMillis(), 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 a31640fab8ebd..5d6ce3e4345ab 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 @@ -43,6 +43,7 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.Set; import java.util.function.IntConsumer; import java.util.function.Predicate; @@ -68,6 +69,7 @@ public class RestSearchAction extends BaseRestHandler { private final SearchUsageHolder searchUsageHolder; private final Predicate clusterSupportsFeature; private final Settings settings; + private final boolean inCpsContext; public RestSearchAction(SearchUsageHolder searchUsageHolder, Predicate clusterSupportsFeature) { this(searchUsageHolder, clusterSupportsFeature, null); @@ -77,6 +79,7 @@ public RestSearchAction(SearchUsageHolder searchUsageHolder, Predicate searchRequest.source().size(size); request.withContentOrSourceParamParserOrNull( - parser -> parseSearchRequest(searchRequest, request, parser, clusterSupportsFeature, setSize, searchUsageHolder) + parser -> parseSearchRequest( + searchRequest, + request, + parser, + clusterSupportsFeature, + setSize, + searchUsageHolder, + Optional.of(inCpsContext) + ) ); return channel -> { @@ -146,15 +157,17 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC * parameter * @param clusterSupportsFeature used to check if certain features are available in this cluster * @param setSize how the size url parameter is handled. {@code udpate_by_query} and regular search differ here. + * @param inCpsContext specifies if we're in CPS context. It's empty if it's not relevant. */ public static void parseSearchRequest( SearchRequest searchRequest, RestRequest request, XContentParser requestContentParser, Predicate clusterSupportsFeature, - IntConsumer setSize + IntConsumer setSize, + Optional inCpsContext ) throws IOException { - parseSearchRequest(searchRequest, request, requestContentParser, clusterSupportsFeature, setSize, null); + parseSearchRequest(searchRequest, request, requestContentParser, clusterSupportsFeature, setSize, null, inCpsContext); } /** @@ -167,6 +180,7 @@ public static void parseSearchRequest( * @param clusterSupportsFeature used to check if certain features are available in this cluster * @param setSize how the size url parameter is handled. {@code udpate_by_query} and regular search differ here. * @param searchUsageHolder the holder of search usage stats + * @param inCpsContext specifies if we're in CPS context. It's empty if it's not relevant. */ public static void parseSearchRequest( SearchRequest searchRequest, @@ -174,7 +188,8 @@ public static void parseSearchRequest( @Nullable XContentParser requestContentParser, Predicate clusterSupportsFeature, IntConsumer setSize, - @Nullable SearchUsageHolder searchUsageHolder + @Nullable SearchUsageHolder searchUsageHolder, + Optional inCpsContext ) throws IOException { if (searchRequest.source() == null) { searchRequest.source(new SearchSourceBuilder()); @@ -229,6 +244,10 @@ public static void parseSearchRequest( if (searchRequest.pointInTimeBuilder() != null) { preparePointInTime(searchRequest, request); } else { + if (inCpsContext.orElse(false) && request.hasParam("ccs_minimize_roundtrips")) { + throw new IllegalArgumentException("Setting ccs_minimize_roundtrips is not supported in CPS context"); + } + searchRequest.setCcsMinimizeRoundtrips( request.paramAsBoolean("ccs_minimize_roundtrips", searchRequest.isCcsMinimizeRoundtrips()) ); 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 39f2539dbd791..417b152676e72 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 @@ -24,6 +24,7 @@ import java.io.IOException; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.IntConsumer; import java.util.function.Predicate; @@ -39,6 +40,7 @@ public final class RestSubmitAsyncSearchAction extends BaseRestHandler { private final SearchUsageHolder searchUsageHolder; private final Predicate clusterSupportsFeature; private final Settings settings; + private final boolean inCpsContext; public RestSubmitAsyncSearchAction(SearchUsageHolder searchUsageHolder, Predicate clusterSupportsFeature) { this(searchUsageHolder, clusterSupportsFeature, null); @@ -52,6 +54,7 @@ public RestSubmitAsyncSearchAction( this.searchUsageHolder = searchUsageHolder; this.clusterSupportsFeature = clusterSupportsFeature; this.settings = settings; + this.inCpsContext = settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false); } @Override @@ -71,7 +74,7 @@ protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient cli } SubmitAsyncSearchRequest submit = new SubmitAsyncSearchRequest(); - if (settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false)) { + if (inCpsContext) { // accept but drop project_routing param until fully supported request.param("project_routing"); } @@ -82,7 +85,15 @@ protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient cli // them as supported. We rely on SubmitAsyncSearchRequest#validate to fail in case they are set. // Note that ccs_minimize_roundtrips is also set this way, which is a supported option. request.withContentOrSourceParamParserOrNull( - parser -> parseSearchRequest(submit.getSearchRequest(), request, parser, clusterSupportsFeature, setSize, searchUsageHolder) + parser -> parseSearchRequest( + submit.getSearchRequest(), + request, + parser, + clusterSupportsFeature, + setSize, + searchUsageHolder, + Optional.of(inCpsContext) + ) ); if (request.hasParam("wait_for_completion_timeout")) { diff --git a/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/rest/RestFleetSearchAction.java b/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/rest/RestFleetSearchAction.java index a79424b8b7d59..4b40bf43c3f05 100644 --- a/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/rest/RestFleetSearchAction.java +++ b/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/rest/RestFleetSearchAction.java @@ -26,6 +26,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.IntConsumer; import java.util.function.Predicate; @@ -70,7 +71,15 @@ protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient cli IntConsumer setSize = size -> searchRequest.source().size(size); request.withContentOrSourceParamParserOrNull(parser -> { - RestSearchAction.parseSearchRequest(searchRequest, request, parser, clusterSupportsFeature, setSize, searchUsageHolder); + RestSearchAction.parseSearchRequest( + searchRequest, + request, + parser, + clusterSupportsFeature, + setSize, + searchUsageHolder, + Optional.empty() + ); String[] stringWaitForCheckpoints = request.paramAsStringArray("wait_for_checkpoints", Strings.EMPTY_ARRAY); final long[] waitForCheckpoints = new long[stringWaitForCheckpoints.length]; for (int i = 0; i < stringWaitForCheckpoints.length; ++i) { diff --git a/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/rest/RestRollupSearchAction.java b/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/rest/RestRollupSearchAction.java index a2e795d07aaf2..3aefae300a8e4 100644 --- a/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/rest/RestRollupSearchAction.java +++ b/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/rest/RestRollupSearchAction.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.Predicate; @@ -52,7 +53,8 @@ protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient restRequest, parser, clusterSupportsFeature, - size -> searchRequest.source().size(size) + size -> searchRequest.source().size(size), + Optional.empty() ) ); RestSearchAction.validateSearchRequest(restRequest, searchRequest); From 80461afab86184df00ed219d687606a2e69fc00e Mon Sep 17 00:00:00 2001 From: Pawan Kartik Date: Tue, 30 Sep 2025 18:14:46 +0100 Subject: [PATCH 2/6] Set `MRT` when parsing instead of waiting for `TSA` --- .../action/search/TransportSearchAction.java | 4 ---- .../rest/action/search/RestSearchAction.java | 18 ++++++++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java b/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java index 7f371f6a9cf81..fd14f54371a5e 100644 --- a/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java +++ b/server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java @@ -353,10 +353,6 @@ private void executeRequest( Function, SearchPhaseProvider> searchPhaseProvider, boolean collectSearchTelemetry ) { - if (forceConnectTimeoutSecs != null) { - original.setCcsMinimizeRoundtrips(true); - } - final long relativeStartNanos = System.nanoTime(); final SearchTimeProvider timeProvider = new SearchTimeProvider( original.getOrCreateAbsoluteStartMillis(), 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 5d6ce3e4345ab..bf9e956e3d426 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 @@ -244,13 +244,19 @@ public static void parseSearchRequest( if (searchRequest.pointInTimeBuilder() != null) { preparePointInTime(searchRequest, request); } else { - if (inCpsContext.orElse(false) && request.hasParam("ccs_minimize_roundtrips")) { - throw new IllegalArgumentException("Setting ccs_minimize_roundtrips is not supported in CPS context"); + if (inCpsContext.orElse(false)) { + // We're in CPS environment. MRT should always be true and not be settable by the user. + if (request.hasParam("ccs_minimize_roundtrips")) { + throw new IllegalArgumentException("Setting ccs_minimize_roundtrips is not supported in CPS context"); + } else { + searchRequest.setCcsMinimizeRoundtrips(true); + } + } else { + // We're not in CPS environment, so parse what's in the request. + searchRequest.setCcsMinimizeRoundtrips( + request.paramAsBoolean("ccs_minimize_roundtrips", searchRequest.isCcsMinimizeRoundtrips()) + ); } - - searchRequest.setCcsMinimizeRoundtrips( - request.paramAsBoolean("ccs_minimize_roundtrips", searchRequest.isCcsMinimizeRoundtrips()) - ); } if (request.paramAsBoolean("force_synthetic_source", false)) { searchRequest.setForceSyntheticSource(true); From f35bf008c6c1f6d6d1829909d139c2ffbc0df370 Mon Sep 17 00:00:00 2001 From: Pawan Kartik Date: Wed, 1 Oct 2025 12:48:54 +0100 Subject: [PATCH 3/6] Address some review comments --- .../mustache/RestSearchTemplateAction.java | 7 ++++-- .../rest/action/search/RestSearchAction.java | 24 +++++++++++++------ .../search/RestSubmitAsyncSearchAction.java | 1 + 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java index eb6005d2fb2ac..d08dd86b94443 100644 --- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java +++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java @@ -39,10 +39,12 @@ public class RestSearchTemplateAction extends BaseRestHandler { private final Predicate clusterSupportsFeature; private final Settings settings; + private final boolean inCpsContext; public RestSearchTemplateAction(Predicate clusterSupportsFeature, Settings settings) { this.clusterSupportsFeature = clusterSupportsFeature; this.settings = settings; + this.inCpsContext = settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false); } @Override @@ -62,7 +64,7 @@ public String getName() { @Override public RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { - if (settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false)) { + if (inCpsContext) { // accept but drop project_routing param until fully supported request.param("project_routing"); } @@ -75,7 +77,8 @@ public RestChannelConsumer prepareRequest(RestRequest request, NodeClient client null, clusterSupportsFeature, size -> searchRequest.source().size(size), - Optional.empty() + // This endpoint is CPS-enabled. + Optional.of(true) ); // Creates the search template request 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 bf9e956e3d426..cff590a03122f 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 @@ -157,7 +157,13 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC * parameter * @param clusterSupportsFeature used to check if certain features are available in this cluster * @param setSize how the size url parameter is handled. {@code udpate_by_query} and regular search differ here. - * @param inCpsContext specifies if we're in CPS context. It's empty if it's not relevant. + * @param inCpsContext specifies if we're in CPS context. + *
+ * true - the endpoint that's invoking this method is CPS-enabled and in a CPS/Serverless context. + *
+ * false - the endpoint that's invoking this method is CPS-enabled but not in a CPS/Serverless context. + *
+ * Optional.empty - the endpoint is not CPS-enabled irrespective of the environment. */ public static void parseSearchRequest( SearchRequest searchRequest, @@ -180,7 +186,13 @@ public static void parseSearchRequest( * @param clusterSupportsFeature used to check if certain features are available in this cluster * @param setSize how the size url parameter is handled. {@code udpate_by_query} and regular search differ here. * @param searchUsageHolder the holder of search usage stats - * @param inCpsContext specifies if we're in CPS context. It's empty if it's not relevant. + * @param inCpsContext specifies if we're in CPS context. + *
+ * true - the endpoint that's invoking this method is CPS-enabled and in a CPS/Serverless context. + *
+ * false - the endpoint that's invoking this method is CPS-enabled but not in a CPS/Serverless context. + *
+ * Optional.empty - the endpoint is not CPS-enabled irrespective of the environment. */ public static void parseSearchRequest( SearchRequest searchRequest, @@ -245,14 +257,12 @@ public static void parseSearchRequest( preparePointInTime(searchRequest, request); } else { if (inCpsContext.orElse(false)) { - // We're in CPS environment. MRT should always be true and not be settable by the user. + // We're in CPS environment. MRT should not be settable by the user. if (request.hasParam("ccs_minimize_roundtrips")) { - throw new IllegalArgumentException("Setting ccs_minimize_roundtrips is not supported in CPS context"); - } else { - searchRequest.setCcsMinimizeRoundtrips(true); + throw new IllegalArgumentException("Setting ccs_minimize_roundtrips is not supported in cross-project search context"); } } else { - // We're not in CPS environment, so parse what's in the request. + // Either we're in non-CPS environment or the endpoint isn't CPS enabled, so parse what's in the request. searchRequest.setCcsMinimizeRoundtrips( request.paramAsBoolean("ccs_minimize_roundtrips", searchRequest.isCcsMinimizeRoundtrips()) ); 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 417b152676e72..0eef43818431f 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 @@ -77,6 +77,7 @@ protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient cli if (inCpsContext) { // accept but drop project_routing param until fully supported request.param("project_routing"); + submit.getSearchRequest().setCcsMinimizeRoundtrips(true); } IntConsumer setSize = size -> submit.getSearchRequest().source().size(size); From 264302ed7c8a2e2a5af5f6f35b99e5f03ec5218b Mon Sep 17 00:00:00 2001 From: Pawan Kartik Date: Wed, 1 Oct 2025 14:24:54 +0100 Subject: [PATCH 4/6] Add comments to endpoints clarifying CPS context argument --- .../elasticsearch/xpack/fleet/rest/RestFleetSearchAction.java | 1 + .../elasticsearch/xpack/rollup/rest/RestRollupSearchAction.java | 1 + 2 files changed, 2 insertions(+) diff --git a/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/rest/RestFleetSearchAction.java b/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/rest/RestFleetSearchAction.java index 4b40bf43c3f05..72df39814525f 100644 --- a/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/rest/RestFleetSearchAction.java +++ b/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/rest/RestFleetSearchAction.java @@ -78,6 +78,7 @@ protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient cli clusterSupportsFeature, setSize, searchUsageHolder, + // This endpoint is not CPS-enabled. Optional.empty() ); String[] stringWaitForCheckpoints = request.paramAsStringArray("wait_for_checkpoints", Strings.EMPTY_ARRAY); diff --git a/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/rest/RestRollupSearchAction.java b/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/rest/RestRollupSearchAction.java index 3aefae300a8e4..24e0c0400f189 100644 --- a/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/rest/RestRollupSearchAction.java +++ b/x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/rest/RestRollupSearchAction.java @@ -54,6 +54,7 @@ protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient parser, clusterSupportsFeature, size -> searchRequest.source().size(size), + // This endpoint is not CPS-enabled. Optional.empty() ) ); From fcf4f0967bcb73743aa26fe7d70cc6d4ba0e6a40 Mon Sep 17 00:00:00 2001 From: Pawan Kartik Date: Wed, 1 Oct 2025 16:37:33 +0100 Subject: [PATCH 5/6] Propagate CPS context value --- .../script/mustache/RestSearchTemplateAction.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java index d08dd86b94443..cd9172fc1aff1 100644 --- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java +++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java @@ -77,8 +77,8 @@ public RestChannelConsumer prepareRequest(RestRequest request, NodeClient client null, clusterSupportsFeature, size -> searchRequest.source().size(size), - // This endpoint is CPS-enabled. - Optional.of(true) + // This endpoint is CPS-enabled so propagate the right value. + Optional.of(inCpsContext) ); // Creates the search template request From fbffdfe8b7b28cc742f8c66736cf47dc00db924b Mon Sep 17 00:00:00 2001 From: Pawan Kartik Date: Wed, 1 Oct 2025 16:39:08 +0100 Subject: [PATCH 6/6] Add clarifying comments for CPS context argument --- .../org/elasticsearch/rest/action/search/RestSearchAction.java | 1 + .../elasticsearch/xpack/search/RestSubmitAsyncSearchAction.java | 1 + 2 files changed, 2 insertions(+) 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 cff590a03122f..30f3aa566c537 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 @@ -138,6 +138,7 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC clusterSupportsFeature, setSize, searchUsageHolder, + // This endpoint is CPS-enabled so propagate the right value. Optional.of(inCpsContext) ) ); 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 0eef43818431f..565ad19927570 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 @@ -93,6 +93,7 @@ protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient cli clusterSupportsFeature, setSize, searchUsageHolder, + // This endpoint is CPS-enabled so propagate the right value. Optional.of(inCpsContext) ) );