Skip to content

Commit 5833317

Browse files
committed
Make partial to be set when there's skipped or partial
1 parent d3c8ef5 commit 5833317

File tree

6 files changed

+29
-16
lines changed

6 files changed

+29
-16
lines changed

x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/EsqlRestValidationIT.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111

1212
import org.apache.http.HttpHost;
1313
import org.elasticsearch.Version;
14-
import org.elasticsearch.client.Request;
15-
import org.elasticsearch.client.Response;
1614
import org.elasticsearch.client.RestClient;
1715
import org.elasticsearch.core.IOUtils;
1816
import org.elasticsearch.test.TestClustersThreadFilter;
@@ -52,20 +50,6 @@ public static void closeRemoteClients() throws IOException {
5250
}
5351
}
5452

55-
@Before
56-
public void randomizeSkipUnavailable() throws IOException {
57-
Request request = new Request("PUT", "_cluster/settings");
58-
request.setJsonEntity("""
59-
{
60-
"persistent": {
61-
"cluster.remote.remote_cluster.skip_unavailable": $SKIP_UNAVAILABLE$
62-
}
63-
}
64-
""".replace("$SKIP_UNAVAILABLE$", String.valueOf(randomBoolean())));
65-
Response response = client().performRequest(request);
66-
assertOK(response);
67-
}
68-
6953
@Override
7054
protected String clusterSpecificIndexName(String pattern) {
7155
StringJoiner sj = new StringJoiner(",");

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/CrossClusterEnrichUnavailableClustersIT.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,11 +510,17 @@ private static void assertCCSExecutionInfoDetails(EsqlExecutionInfo executionInf
510510
assertThat(executionInfo.overallTook().millis(), greaterThanOrEqualTo(0L));
511511
assertTrue(executionInfo.isCrossClusterSearch());
512512

513+
boolean hasPartials = false;
513514
for (String clusterAlias : executionInfo.clusterAliases()) {
514515
EsqlExecutionInfo.Cluster cluster = executionInfo.getCluster(clusterAlias);
515516
assertThat(cluster.getTook().millis(), greaterThanOrEqualTo(0L));
516517
assertThat(cluster.getTook().millis(), lessThanOrEqualTo(executionInfo.overallTook().millis()));
518+
if (cluster.getStatus() == EsqlExecutionInfo.Cluster.Status.PARTIAL
519+
|| cluster.getStatus() == EsqlExecutionInfo.Cluster.Status.SKIPPED) {
520+
hasPartials = true;
521+
}
517522
}
523+
assertThat(executionInfo.isPartial(), equalTo(hasPartials));
518524
}
519525

520526
private void setSkipUnavailable(String clusterAlias, boolean skip) {

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/CrossClusterQueryUnavailableRemotesIT.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public void testCCSAgainstDisconnectedRemoteWithSkipUnavailableTrue() throws Exc
9999
long overallTookMillis = executionInfo.overallTook().millis();
100100
assertThat(overallTookMillis, greaterThanOrEqualTo(0L));
101101
assertThat(executionInfo.includeCCSMetadata(), equalTo(responseExpectMeta));
102+
assertThat(executionInfo.isPartial(), equalTo(true));
102103

103104
assertThat(executionInfo.clusterAliases(), equalTo(Set.of(REMOTE_CLUSTER_1, REMOTE_CLUSTER_2, LOCAL_CLUSTER)));
104105

@@ -151,6 +152,7 @@ public void testCCSAgainstDisconnectedRemoteWithSkipUnavailableTrue() throws Exc
151152
long overallTookMillis = executionInfo.overallTook().millis();
152153
assertThat(overallTookMillis, greaterThanOrEqualTo(0L));
153154
assertThat(executionInfo.includeCCSMetadata(), equalTo(responseExpectMeta));
155+
assertThat(executionInfo.isPartial(), equalTo(true));
154156

155157
assertThat(executionInfo.clusterAliases(), equalTo(Set.of(REMOTE_CLUSTER_1, REMOTE_CLUSTER_2, LOCAL_CLUSTER)));
156158

@@ -203,6 +205,7 @@ public void testCCSAgainstDisconnectedRemoteWithSkipUnavailableTrue() throws Exc
203205
long overallTookMillis = executionInfo.overallTook().millis();
204206
assertThat(overallTookMillis, greaterThanOrEqualTo(0L));
205207
assertThat(executionInfo.includeCCSMetadata(), equalTo(responseExpectMeta));
208+
assertThat(executionInfo.isPartial(), equalTo(true));
206209

207210
assertThat(executionInfo.clusterAliases(), equalTo(Set.of(REMOTE_CLUSTER_1, REMOTE_CLUSTER_2, LOCAL_CLUSTER)));
208211

@@ -275,6 +278,7 @@ public void testRemoteOnlyCCSAgainstDisconnectedRemoteWithSkipUnavailableTrue()
275278
long overallTookMillis = executionInfo.overallTook().millis();
276279
assertThat(overallTookMillis, greaterThanOrEqualTo(0L));
277280
assertThat(executionInfo.includeCCSMetadata(), equalTo(responseExpectMeta));
281+
assertThat(executionInfo.isPartial(), equalTo(true));
278282

279283
assertThat(executionInfo.clusterAliases(), equalTo(Set.of(REMOTE_CLUSTER_1)));
280284

@@ -317,6 +321,7 @@ public void testRemoteOnlyCCSAgainstDisconnectedRemoteWithSkipUnavailableTrue()
317321
long overallTookMillis = executionInfo.overallTook().millis();
318322
assertThat(overallTookMillis, greaterThanOrEqualTo(0L));
319323
assertThat(executionInfo.includeCCSMetadata(), equalTo(responseExpectMeta));
324+
assertThat(executionInfo.isPartial(), equalTo(true));
320325

321326
assertThat(executionInfo.clusterAliases(), equalTo(Set.of(REMOTE_CLUSTER_1, REMOTE_CLUSTER_2)));
322327

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/CrossClustersCancellationIT.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ public void testCancelSkipUnavailable() throws Exception {
280280
EsqlExecutionInfo executionInfo = resp.getExecutionInfo();
281281

282282
assertNotNull(executionInfo);
283+
assertThat(executionInfo.isPartial(), equalTo(true));
283284
EsqlExecutionInfo.Cluster cluster = executionInfo.getCluster(REMOTE_CLUSTER);
284285

285286
assertThat(cluster.getStatus(), equalTo(EsqlExecutionInfo.Cluster.Status.PARTIAL));
@@ -308,6 +309,7 @@ public void testCloseSkipUnavailable() throws Exception {
308309
try (var resp = requestFuture.actionGet()) {
309310
EsqlExecutionInfo executionInfo = resp.getExecutionInfo();
310311
assertNotNull(executionInfo);
312+
assertThat(executionInfo.isPartial(), equalTo(true));
311313

312314
List<List<Object>> values = getValuesList(resp);
313315
assertThat(values.get(0).size(), equalTo(1));

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/CrossClustersQueryIT.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ public void assertExpectedClustersForMissingIndicesTests(EsqlExecutionInfo execu
474474
Set<String> expectedClusterAliases = expected.stream().map(c -> c.clusterAlias()).collect(Collectors.toSet());
475475
assertThat(executionInfo.clusterAliases(), equalTo(expectedClusterAliases));
476476

477+
boolean hasSkipped = false;
477478
for (ExpectedCluster expectedCluster : expected) {
478479
EsqlExecutionInfo.Cluster cluster = executionInfo.getCluster(expectedCluster.clusterAlias());
479480
String msg = cluster.getClusterAlias();
@@ -492,10 +493,12 @@ public void assertExpectedClustersForMissingIndicesTests(EsqlExecutionInfo execu
492493
assertThat(msg, cluster.getFailures().get(0).getCause(), instanceOf(VerificationException.class));
493494
String expectedMsg = "Unknown index [" + expectedCluster.indexExpression() + "]";
494495
assertThat(msg, cluster.getFailures().get(0).getCause().getMessage(), containsString(expectedMsg));
496+
hasSkipped = true;
495497
}
496498
// currently failed shards is always zero - change this once we start allowing partial data for individual shard failures
497499
assertThat(msg, cluster.getFailedShards(), equalTo(0));
498500
}
501+
assertThat(executionInfo.isPartial(), equalTo(hasSkipped));
499502
}
500503

501504
public void testSearchesWhereNonExistentClusterIsSpecifiedWithWildcards() {
@@ -541,6 +544,7 @@ public void testSearchesWhereNonExistentClusterIsSpecifiedWithWildcards() {
541544
assertThat(executionInfo.isCrossClusterSearch(), is(true));
542545
assertThat(executionInfo.overallTook().millis(), greaterThanOrEqualTo(0L));
543546
assertThat(executionInfo.includeCCSMetadata(), equalTo(responseExpectMeta));
547+
assertThat(executionInfo.isPartial(), equalTo(true));
544548

545549
assertThat(executionInfo.clusterAliases(), equalTo(Set.of(REMOTE_CLUSTER_1, LOCAL_CLUSTER)));
546550

@@ -597,6 +601,7 @@ public void testCCSExecutionOnSearchesWithLimit0() {
597601
long overallTookMillis = executionInfo.overallTook().millis();
598602
assertThat(overallTookMillis, greaterThanOrEqualTo(0L));
599603
assertThat(executionInfo.includeCCSMetadata(), equalTo(responseExpectMeta));
604+
assertThat(executionInfo.isPartial(), equalTo(false));
600605
assertThat(executionInfo.clusterAliases(), equalTo(Set.of(REMOTE_CLUSTER_1, LOCAL_CLUSTER)));
601606

602607
EsqlExecutionInfo.Cluster remoteCluster = executionInfo.getCluster(REMOTE_CLUSTER_1);
@@ -645,6 +650,7 @@ public void testMetadataIndex() {
645650
assertThat(executionInfo.isCrossClusterSearch(), is(true));
646651
assertThat(executionInfo.includeCCSMetadata(), equalTo(responseExpectMeta));
647652
assertThat(executionInfo.overallTook().millis(), greaterThanOrEqualTo(0L));
653+
assertThat(executionInfo.isPartial(), equalTo(false));
648654

649655
EsqlExecutionInfo.Cluster remoteCluster = executionInfo.getCluster(REMOTE_CLUSTER_1);
650656
assertThat(remoteCluster.getIndexExpression(), equalTo("logs*"));

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/TransportEsqlQueryAction.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,16 @@ private void innerExecute(Task task, EsqlQueryRequest request, ActionListener<Es
260260
planRunner,
261261
queryBuilderResolver,
262262
ActionListener.wrap(result -> {
263+
// If we had any skipped or partial clusters, the result is partial
264+
if (executionInfo.getClusters()
265+
.values()
266+
.stream()
267+
.anyMatch(
268+
c -> c.getStatus() == EsqlExecutionInfo.Cluster.Status.SKIPPED
269+
|| c.getStatus() == EsqlExecutionInfo.Cluster.Status.PARTIAL
270+
)) {
271+
executionInfo.markAsPartial();
272+
}
263273
recordCCSTelemetry(task, executionInfo, request, null);
264274
listener.onResponse(toResponse(task, request, configuration, result));
265275
}, ex -> {

0 commit comments

Comments
 (0)