From 8f38b13059ed39a7dbea63c525479e30b94c772c Mon Sep 17 00:00:00 2001 From: Alexander Spies Date: Fri, 4 Apr 2025 16:27:13 +0200 Subject: [PATCH] ESQL: Revert "Allow partial results by default in ES|QL (#125060)" (#126286) This reverts commit 81555cc9d95c75c563edc1d3d8fdeb6c6512e41d from https://github.com/elastic/elasticsearch/pull/125060. Fix https://github.com/elastic/elasticsearch/issues/126275 @idegtiarenko and I investigated and believe this needs reverting: silently dropping results from the query response in case any index is missing can lead to real problems if users don't spot their mistake. I'm also not sure if all the results will get dropped, or only from some nodes/shards/clusters, meaning that this might be hard to spot by users if only some results get dropped. The main PR has no transport version bump, no new ESQL capability, and was merged 15h ago - so it should be safe to just revert it. I noticed there was a linked Serverless PR on the original PR, but it merely disabled some obsolete tests on Serverless and doesn't require reverting itself. --- docs/changelog/125060.yaml | 16 ------- docs/changelog/126286.yaml | 6 +++ docs/release-notes/breaking-changes.md | 5 --- .../xpack/esql/heap_attack/Clusters.java | 1 - x-pack/plugin/build.gradle | 1 - .../xpack/esql/EsqlSecurityIT.java | 24 +++-------- .../xpack/esql/ccq/EsqlRestValidationIT.java | 2 +- .../esql/ccq/RequestIndexFilteringIT.java | 7 --- .../xpack/esql/qa/single_node/RestEsqlIT.java | 2 +- .../qa/rest/EsqlRestValidationTestCase.java | 1 - .../rest/RequestIndexFilteringTestCase.java | 17 ++------ .../xpack/esql/qa/rest/RestEsqlTestCase.java | 14 +++--- .../action/AbstractCrossClusterTestCase.java | 6 --- .../action/AbstractEsqlIntegTestCase.java | 8 ---- .../action/CrossClusterCancellationIT.java | 43 ++++++++++++++++--- .../xpack/esql/action/ManyShardsIT.java | 1 - .../xpack/esql/plugin/EsqlPlugin.java | 2 +- .../CrossClusterEsqlRCS1MissingIndicesIT.java | 2 - .../RemoteClusterSecurityEsqlIT.java | 2 - 19 files changed, 60 insertions(+), 100 deletions(-) delete mode 100644 docs/changelog/125060.yaml create mode 100644 docs/changelog/126286.yaml diff --git a/docs/changelog/125060.yaml b/docs/changelog/125060.yaml deleted file mode 100644 index 3c5b04810a25..000000000000 --- a/docs/changelog/125060.yaml +++ /dev/null @@ -1,16 +0,0 @@ -pr: 125060 -summary: Allow partial results by default in ES|QL -area: ES|QL -type: breaking -issues: [122802] - -breaking: - title: Allow partial results by default in ES|QL - area: ES|QL - details: >- - In earlier versions of {es}, ES|QL would fail the entire query if it encountered any error. ES|QL now returns partial results instead of failing when encountering errors. - - impact: >- - Callers should check the `is_partial` flag returned in the response to determine if the result is partial or complete. If returning partial results is not desired, this option can be overridden per request via an `allow_partial_results` parameter in the query URL or globally via the cluster setting `esql.query.allow_partial_results`. - - notable: true diff --git a/docs/changelog/126286.yaml b/docs/changelog/126286.yaml new file mode 100644 index 000000000000..3e8b1604e467 --- /dev/null +++ b/docs/changelog/126286.yaml @@ -0,0 +1,6 @@ +pr: 126286 +summary: Revert "Allow partial results by default in ES|QL" +area: ES|QL +type: bug +issues: + - 126275 diff --git a/docs/release-notes/breaking-changes.md b/docs/release-notes/breaking-changes.md index 1befeb9de7a4..df73453220a0 100644 --- a/docs/release-notes/breaking-changes.md +++ b/docs/release-notes/breaking-changes.md @@ -14,11 +14,6 @@ To learn how to upgrade, check out . % ## Next version [elasticsearch-nextversion-breaking-changes] -## 9.1.0 [elasticsearch-910-breaking-changes] - -ES|QL -: * Allow partial results by default in ES|QL [#125060](https://github.com/elastic/elasticsearch/pull/125060) - ## 9.0.0 [elasticsearch-900-breaking-changes] Allocation diff --git a/test/external-modules/esql-heap-attack/src/javaRestTest/java/org/elasticsearch/xpack/esql/heap_attack/Clusters.java b/test/external-modules/esql-heap-attack/src/javaRestTest/java/org/elasticsearch/xpack/esql/heap_attack/Clusters.java index 1c237404a78c..9fe176ca6be9 100644 --- a/test/external-modules/esql-heap-attack/src/javaRestTest/java/org/elasticsearch/xpack/esql/heap_attack/Clusters.java +++ b/test/external-modules/esql-heap-attack/src/javaRestTest/java/org/elasticsearch/xpack/esql/heap_attack/Clusters.java @@ -21,7 +21,6 @@ public class Clusters { .module("test-esql-heap-attack") .setting("xpack.security.enabled", "false") .setting("xpack.license.self_generated.type", "trial") - .setting("esql.query.allow_partial_results", "false") .jvmArg("-Xmx512m"); String javaVersion = JvmInfo.jvmInfo().version(); if (javaVersion.equals("20") || javaVersion.equals("21")) { diff --git a/x-pack/plugin/build.gradle b/x-pack/plugin/build.gradle index 15bc7493308d..620a6c016357 100644 --- a/x-pack/plugin/build.gradle +++ b/x-pack/plugin/build.gradle @@ -124,7 +124,6 @@ tasks.named("yamlRestCompatTestTransform").configure({ task -> task.skipTest("ml/post_data/Test POST data job api, flush, close and verify DataCounts doc", "Flush API is deprecated") task.replaceValueInMatch("Size", 49, "Test flamegraph from profiling-events") task.replaceValueInMatch("Size", 49, "Test flamegraph from test-events") - task.skipTest("esql/63_enrich_int_range/Invalid age as double", "TODO: require disable allow_partial_results") }) tasks.named('yamlRestCompatTest').configure { diff --git a/x-pack/plugin/esql/qa/security/src/javaRestTest/java/org/elasticsearch/xpack/esql/EsqlSecurityIT.java b/x-pack/plugin/esql/qa/security/src/javaRestTest/java/org/elasticsearch/xpack/esql/EsqlSecurityIT.java index b2cef7366c0f..a809bd50a45b 100644 --- a/x-pack/plugin/esql/qa/security/src/javaRestTest/java/org/elasticsearch/xpack/esql/EsqlSecurityIT.java +++ b/x-pack/plugin/esql/qa/security/src/javaRestTest/java/org/elasticsearch/xpack/esql/EsqlSecurityIT.java @@ -312,10 +312,7 @@ public class EsqlSecurityIT extends ESRestTestCase { searchRequest.setOptions(RequestOptions.DEFAULT.toBuilder().addHeader("es-security-runas-user", "metadata1_read2")); // ES|QL query on the same index pattern - var esqlResp = expectThrows( - ResponseException.class, - () -> runESQLCommand("metadata1_read2", "FROM index-user1,index-user2", false) - ); + var esqlResp = expectThrows(ResponseException.class, () -> runESQLCommand("metadata1_read2", "FROM index-user1,index-user2")); var srchResp = expectThrows(ResponseException.class, () -> client().performRequest(searchRequest)); for (ResponseException r : List.of(esqlResp, srchResp)) { @@ -334,8 +331,7 @@ public class EsqlSecurityIT extends ESRestTestCase { ResponseException.class, () -> runESQLCommand( "metadata1_read2", - "FROM index-user1,index-user2 METADATA _index | STATS sum=sum(value), index=VALUES(_index)", - false + "FROM index-user1,index-user2 METADATA _index | STATS sum=sum(value), index=VALUES(_index)" ) ); assertThat( @@ -348,7 +344,7 @@ public class EsqlSecurityIT extends ESRestTestCase { resp = expectThrows( ResponseException.class, - () -> runESQLCommand("metadata1_read2", "FROM index-user1,index-user2 METADATA _index | STATS index=VALUES(_index)", false) + () -> runESQLCommand("metadata1_read2", "FROM index-user1,index-user2 METADATA _index | STATS index=VALUES(_index)") ); assertThat( EntityUtils.toString(resp.getResponse().getEntity()), @@ -360,7 +356,7 @@ public class EsqlSecurityIT extends ESRestTestCase { resp = expectThrows( ResponseException.class, - () -> runESQLCommand("metadata1_read2", "FROM index-user1,index-user2 | STATS sum=sum(value)", false) + () -> runESQLCommand("metadata1_read2", "FROM index-user1,index-user2 | STATS sum=sum(value)") ); assertThat( EntityUtils.toString(resp.getResponse().getEntity()), @@ -372,7 +368,7 @@ public class EsqlSecurityIT extends ESRestTestCase { resp = expectThrows( ResponseException.class, - () -> runESQLCommand("alias_user1", "FROM first-alias,index-user1 METADATA _index | KEEP _index, org, value | LIMIT 10", false) + () -> runESQLCommand("alias_user1", "FROM first-alias,index-user1 METADATA _index | KEEP _index, org, value | LIMIT 10") ); assertThat( EntityUtils.toString(resp.getResponse().getEntity()), @@ -386,8 +382,7 @@ public class EsqlSecurityIT extends ESRestTestCase { ResponseException.class, () -> runESQLCommand( "alias_user2", - "from second-alias,index-user2 METADATA _index | stats sum=sum(value), index=VALUES(_index)", - false + "from second-alias,index-user2 METADATA _index | stats sum=sum(value), index=VALUES(_index)" ) ); assertThat( @@ -831,10 +826,6 @@ public class EsqlSecurityIT extends ESRestTestCase { } protected Response runESQLCommand(String user, String command) throws IOException { - return runESQLCommand(user, command, null); - } - - protected Response runESQLCommand(String user, String command, Boolean allowPartialResults) throws IOException { if (command.toLowerCase(Locale.ROOT).contains("limit") == false) { // add a (high) limit to avoid warnings on default limit command += " | limit 10000000"; @@ -848,9 +839,6 @@ public class EsqlSecurityIT extends ESRestTestCase { request.setJsonEntity(Strings.toString(json)); request.setOptions(RequestOptions.DEFAULT.toBuilder().addHeader("es-security-runas-user", user)); request.addParameter("error_trace", "true"); - if (allowPartialResults != null) { - request.addParameter("allow_partial_results", Boolean.toString(allowPartialResults)); - } return client().performRequest(request); } diff --git a/x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/EsqlRestValidationIT.java b/x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/EsqlRestValidationIT.java index aed164f9e887..55500aa1c953 100644 --- a/x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/EsqlRestValidationIT.java +++ b/x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/EsqlRestValidationIT.java @@ -83,6 +83,6 @@ public class EsqlRestValidationIT extends EsqlRestValidationTestCase { @Before public void skipTestOnOldVersions() { - assumeTrue("skip on old versions", Clusters.localClusterVersion().equals(Version.V_8_19_0)); + assumeTrue("skip on old versions", Clusters.localClusterVersion().equals(Version.V_8_16_0)); } } diff --git a/x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/RequestIndexFilteringIT.java b/x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/RequestIndexFilteringIT.java index 5011b2d1c593..d8c68dd5281a 100644 --- a/x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/RequestIndexFilteringIT.java +++ b/x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/RequestIndexFilteringIT.java @@ -28,7 +28,6 @@ import org.junit.rules.RuleChain; import org.junit.rules.TestRule; import java.io.IOException; -import java.util.List; import java.util.Map; import static org.elasticsearch.test.MapMatcher.assertMap; @@ -88,12 +87,6 @@ public class RequestIndexFilteringIT extends RequestIndexFilteringTestCase { @Override public Map runEsql(RestEsqlTestCase.RequestObjectBuilder requestObject) throws IOException { - if (requestObject.allowPartialResults() != null) { - assumeTrue( - "require allow_partial_results on local cluster", - clusterHasCapability("POST", "/_query", List.of(), List.of("support_partial_results")).orElse(false) - ); - } requestObject.includeCCSMetadata(true); return super.runEsql(requestObject); } diff --git a/x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/RestEsqlIT.java b/x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/RestEsqlIT.java index 2bb4a067e947..1b44536eed50 100644 --- a/x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/RestEsqlIT.java +++ b/x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/RestEsqlIT.java @@ -111,7 +111,7 @@ public class RestEsqlIT extends RestEsqlTestCase { request.setJsonEntity("{\"f\":" + i + "}"); assertOK(client().performRequest(request)); } - RequestObjectBuilder builder = requestObjectBuilder().query("from test-index | limit 1 | keep f").allowPartialResults(false); + RequestObjectBuilder builder = requestObjectBuilder().query("from test-index | limit 1 | keep f"); builder.pragmas(Settings.builder().put("data_partitioning", "invalid-option").build()); ResponseException re = expectThrows(ResponseException.class, () -> runEsqlSync(builder)); assertThat(EntityUtils.toString(re.getResponse().getEntity()), containsString("No enum constant")); diff --git a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/EsqlRestValidationTestCase.java b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/EsqlRestValidationTestCase.java index 6a66d5a4270c..9ec4f60f4c84 100644 --- a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/EsqlRestValidationTestCase.java +++ b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/EsqlRestValidationTestCase.java @@ -129,7 +129,6 @@ public abstract class EsqlRestValidationTestCase extends ESRestTestCase { final var request = new Request("POST", "/_query"); request.addParameter("error_trace", "true"); request.addParameter("pretty", "true"); - request.addParameter("allow_partial_results", Boolean.toString(false)); request.setJsonEntity( Strings.toString(JsonXContent.contentBuilder().startObject().field("query", "from " + indexName).endObject()) ); diff --git a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RequestIndexFilteringTestCase.java b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RequestIndexFilteringTestCase.java index 0183e180c15d..1fdc11174ee0 100644 --- a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RequestIndexFilteringTestCase.java +++ b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RequestIndexFilteringTestCase.java @@ -198,26 +198,17 @@ public abstract class RequestIndexFilteringTestCase extends ESRestTestCase { int docsTest1 = 0; // we are interested only in the created index, not necessarily that it has data indexTimestampData(docsTest1, "test1", "2024-11-26", "id1"); - ResponseException e = expectThrows( - ResponseException.class, - () -> runEsql(timestampFilter("gte", "2020-01-01").query(from("foo")).allowPartialResults(false)) - ); + ResponseException e = expectThrows(ResponseException.class, () -> runEsql(timestampFilter("gte", "2020-01-01").query(from("foo")))); assertEquals(400, e.getResponse().getStatusLine().getStatusCode()); assertThat(e.getMessage(), containsString("verification_exception")); assertThat(e.getMessage(), anyOf(containsString("Unknown index [foo]"), containsString("Unknown index [remote_cluster:foo]"))); - e = expectThrows( - ResponseException.class, - () -> runEsql(timestampFilter("gte", "2020-01-01").query(from("foo*")).allowPartialResults(false)) - ); + e = expectThrows(ResponseException.class, () -> runEsql(timestampFilter("gte", "2020-01-01").query(from("foo*")))); assertEquals(400, e.getResponse().getStatusLine().getStatusCode()); assertThat(e.getMessage(), containsString("verification_exception")); assertThat(e.getMessage(), anyOf(containsString("Unknown index [foo*]"), containsString("Unknown index [remote_cluster:foo*]"))); - e = expectThrows( - ResponseException.class, - () -> runEsql(timestampFilter("gte", "2020-01-01").query(from("foo", "test1")).allowPartialResults(false)) - ); + e = expectThrows(ResponseException.class, () -> runEsql(timestampFilter("gte", "2020-01-01").query(from("foo", "test1")))); assertEquals(404, e.getResponse().getStatusLine().getStatusCode()); assertThat(e.getMessage(), containsString("index_not_found_exception")); assertThat(e.getMessage(), anyOf(containsString("no such index [foo]"), containsString("no such index [remote_cluster:foo]"))); @@ -226,7 +217,7 @@ public abstract class RequestIndexFilteringTestCase extends ESRestTestCase { var pattern = from("test1"); e = expectThrows( ResponseException.class, - () -> runEsql(timestampFilter("gte", "2020-01-01").query(pattern + " | LOOKUP JOIN foo ON id1").allowPartialResults(false)) + () -> runEsql(timestampFilter("gte", "2020-01-01").query(pattern + " | LOOKUP JOIN foo ON id1")) ); assertEquals(400, e.getResponse().getStatusLine().getStatusCode()); assertThat( diff --git a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java index deb36a291c42..d0c7168218a1 100644 --- a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java +++ b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java @@ -132,7 +132,7 @@ public abstract class RestEsqlTestCase extends ESRestTestCase { private Boolean includeCCSMetadata = null; private CheckedConsumer filter; - private Boolean allowPartialResults = null; + private Boolean allPartialResults = null; public RequestObjectBuilder() throws IOException { this(randomFrom(XContentType.values())); @@ -210,15 +210,11 @@ public abstract class RestEsqlTestCase extends ESRestTestCase { return this; } - public RequestObjectBuilder allowPartialResults(boolean allowPartialResults) { - this.allowPartialResults = allowPartialResults; + public RequestObjectBuilder allPartialResults(boolean allPartialResults) { + this.allPartialResults = allPartialResults; return this; } - public Boolean allowPartialResults() { - return allowPartialResults; - } - public RequestObjectBuilder build() throws IOException { if (isBuilt == false) { if (tables != null) { @@ -1373,8 +1369,8 @@ public abstract class RestEsqlTestCase extends ESRestTestCase { requestObject.build(); Request request = prepareRequest(mode); String mediaType = attachBody(requestObject, request); - if (requestObject.allowPartialResults != null) { - request.addParameter("allow_partial_results", String.valueOf(requestObject.allowPartialResults)); + if (requestObject.allPartialResults != null) { + request.addParameter("allow_partial_results", String.valueOf(requestObject.allPartialResults)); } RequestOptions.Builder options = request.getOptions().toBuilder(); diff --git a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/AbstractCrossClusterTestCase.java b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/AbstractCrossClusterTestCase.java index 992572fc3220..bea757cbf484 100644 --- a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/AbstractCrossClusterTestCase.java +++ b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/AbstractCrossClusterTestCase.java @@ -25,7 +25,6 @@ import org.elasticsearch.test.XContentTestUtils; import org.elasticsearch.transport.RemoteClusterAware; import org.elasticsearch.xcontent.XContentBuilder; import org.elasticsearch.xcontent.json.JsonXContent; -import org.elasticsearch.xpack.esql.plugin.EsqlPlugin; import org.junit.After; import org.junit.Before; @@ -77,11 +76,6 @@ public abstract class AbstractCrossClusterTestCase extends AbstractMultiClusters return plugins; } - @Override - protected Settings nodeSettings() { - return Settings.builder().put(super.nodeSettings()).put(EsqlPlugin.QUERY_ALLOW_PARTIAL_RESULTS.getKey(), false).build(); - } - public static class InternalExchangePlugin extends Plugin { @Override public List> getSettings() { diff --git a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/AbstractEsqlIntegTestCase.java b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/AbstractEsqlIntegTestCase.java index 00d30066899a..5406f3f77320 100644 --- a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/AbstractEsqlIntegTestCase.java +++ b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/AbstractEsqlIntegTestCase.java @@ -139,14 +139,6 @@ public abstract class AbstractEsqlIntegTestCase extends ESIntegTestCase { return CollectionUtils.appendToCopy(super.nodePlugins(), EsqlPlugin.class); } - @Override - protected Settings nodeSettings(int nodeOrdinal, Settings otherSettings) { - return Settings.builder() - .put(super.nodeSettings(nodeOrdinal, otherSettings)) - .put(EsqlPlugin.QUERY_ALLOW_PARTIAL_RESULTS.getKey(), false) - .build(); - } - protected void setRequestCircuitBreakerLimit(ByteSizeValue limit) { if (limit != null) { assertAcked( diff --git a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/CrossClusterCancellationIT.java b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/CrossClusterCancellationIT.java index 191c44cec51d..8131af2da408 100644 --- a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/CrossClusterCancellationIT.java +++ b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/CrossClusterCancellationIT.java @@ -14,20 +14,25 @@ import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.support.PlainActionFuture; import org.elasticsearch.action.support.WriteRequest; -import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.compute.operator.DriverTaskRunner; import org.elasticsearch.compute.operator.exchange.ExchangeService; import org.elasticsearch.core.TimeValue; +import org.elasticsearch.plugins.Plugin; import org.elasticsearch.tasks.TaskCancelledException; import org.elasticsearch.tasks.TaskInfo; +import org.elasticsearch.test.AbstractMultiClustersTestCase; import org.elasticsearch.transport.TransportService; import org.elasticsearch.xcontent.XContentBuilder; import org.elasticsearch.xcontent.json.JsonXContent; import org.elasticsearch.xpack.esql.EsqlTestUtils; import org.elasticsearch.xpack.esql.plugin.ComputeService; +import org.junit.After; +import org.junit.Before; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.concurrent.TimeUnit; @@ -39,7 +44,7 @@ import static org.hamcrest.Matchers.greaterThanOrEqualTo; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.instanceOf; -public class CrossClusterCancellationIT extends AbstractCrossClusterTestCase { +public class CrossClusterCancellationIT extends AbstractMultiClustersTestCase { private static final String REMOTE_CLUSTER = "cluster-a"; @Override @@ -48,11 +53,35 @@ public class CrossClusterCancellationIT extends AbstractCrossClusterTestCase { } @Override - protected Settings nodeSettings() { - return Settings.builder() - .put(super.nodeSettings()) - .put(ExchangeService.INACTIVE_SINKS_INTERVAL_SETTING, TimeValue.timeValueMillis(between(3000, 4000))) - .build(); + protected Collection> nodePlugins(String clusterAlias) { + List> plugins = new ArrayList<>(super.nodePlugins(clusterAlias)); + plugins.add(EsqlPluginWithEnterpriseOrTrialLicense.class); + plugins.add(InternalExchangePlugin.class); + plugins.add(SimplePauseFieldPlugin.class); + return plugins; + } + + public static class InternalExchangePlugin extends Plugin { + @Override + public List> getSettings() { + return List.of( + Setting.timeSetting( + ExchangeService.INACTIVE_SINKS_INTERVAL_SETTING, + TimeValue.timeValueMillis(between(3000, 4000)), + Setting.Property.NodeScope + ) + ); + } + } + + @Before + public void resetPlugin() { + SimplePauseFieldPlugin.resetPlugin(); + } + + @After + public void releasePlugin() { + SimplePauseFieldPlugin.release(); } @Override diff --git a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/ManyShardsIT.java b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/ManyShardsIT.java index 510c11d11f17..c5809d5d5ed1 100644 --- a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/ManyShardsIT.java +++ b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/ManyShardsIT.java @@ -72,7 +72,6 @@ public class ManyShardsIT extends AbstractEsqlIntegTestCase { @Override protected Settings nodeSettings(int nodeOrdinal, Settings otherSettings) { return Settings.builder() - .put(super.nodeSettings(nodeOrdinal, otherSettings)) .put(ExchangeService.INACTIVE_SINKS_INTERVAL_SETTING, TimeValue.timeValueMillis(between(3000, 5000))) .build(); } diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlPlugin.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlPlugin.java index 0c4f1d9d969f..56773005edd5 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlPlugin.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlPlugin.java @@ -105,7 +105,7 @@ public class EsqlPlugin extends Plugin implements ActionPlugin { public static final Setting QUERY_ALLOW_PARTIAL_RESULTS = Setting.boolSetting( "esql.query.allow_partial_results", - true, + false, Setting.Property.NodeScope, Setting.Property.Dynamic ); diff --git a/x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/CrossClusterEsqlRCS1MissingIndicesIT.java b/x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/CrossClusterEsqlRCS1MissingIndicesIT.java index f5c06129eb02..23f33b2351c2 100644 --- a/x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/CrossClusterEsqlRCS1MissingIndicesIT.java +++ b/x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/CrossClusterEsqlRCS1MissingIndicesIT.java @@ -47,7 +47,6 @@ public class CrossClusterEsqlRCS1MissingIndicesIT extends AbstractRemoteClusterS .apply(commonClusterConfig) .setting("remote_cluster.port", "0") .setting("xpack.ml.enabled", "false") - .setting("esql.query.allow_partial_results", "false") .setting("xpack.security.remote_cluster_server.ssl.enabled", () -> String.valueOf(SSL_ENABLED_REF.get())) .setting("xpack.security.remote_cluster_server.ssl.key", "remote-cluster.key") .setting("xpack.security.remote_cluster_server.ssl.certificate", "remote-cluster.crt") @@ -63,7 +62,6 @@ public class CrossClusterEsqlRCS1MissingIndicesIT extends AbstractRemoteClusterS .module("x-pack-enrich") .apply(commonClusterConfig) .setting("xpack.ml.enabled", "false") - .setting("esql.query.allow_partial_results", "false") .setting("xpack.security.remote_cluster_client.ssl.enabled", () -> String.valueOf(SSL_ENABLED_REF.get())) .build(); } diff --git a/x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/RemoteClusterSecurityEsqlIT.java b/x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/RemoteClusterSecurityEsqlIT.java index 7f65d38bd049..dcf993ea4ce7 100644 --- a/x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/RemoteClusterSecurityEsqlIT.java +++ b/x-pack/plugin/security/qa/multi-cluster/src/javaRestTest/java/org/elasticsearch/xpack/remotecluster/RemoteClusterSecurityEsqlIT.java @@ -78,7 +78,6 @@ public class RemoteClusterSecurityEsqlIT extends AbstractRemoteClusterSecurityTe .apply(commonClusterConfig) .setting("remote_cluster.port", "0") .setting("xpack.ml.enabled", "false") - .setting("esql.query.allow_partial_results", "false") .setting("xpack.security.remote_cluster_server.ssl.enabled", () -> String.valueOf(SSL_ENABLED_REF.get())) .setting("xpack.security.remote_cluster_server.ssl.key", "remote-cluster.key") .setting("xpack.security.remote_cluster_server.ssl.certificate", "remote-cluster.crt") @@ -98,7 +97,6 @@ public class RemoteClusterSecurityEsqlIT extends AbstractRemoteClusterSecurityTe .module("ingest-common") .apply(commonClusterConfig) .setting("xpack.ml.enabled", "false") - .setting("esql.query.allow_partial_results", "false") .setting("xpack.security.remote_cluster_client.ssl.enabled", () -> String.valueOf(SSL_ENABLED_REF.get())) .setting("xpack.security.remote_cluster_client.ssl.certificate_authorities", "remote-cluster-ca.crt") .setting("xpack.security.authc.token.enabled", "true")