From b92a58ee7d649409032af1bb4b8697ebeb3e219b Mon Sep 17 00:00:00 2001 From: Ievgen Degtiarenko Date: Thu, 2 Oct 2025 11:01:24 +0200 Subject: [PATCH 1/2] Fix assertion error when executing invalid row query with filter (#135761) (cherry picked from commit 2e6d95a490a9cd95ca0c34fdba3995700d876ecb) --- .../xpack/esql/action/EsqlActionIT.java | 21 +++++++++++++++++-- .../xpack/esql/session/EsqlCCSUtils.java | 3 +++ .../xpack/esql/session/EsqlSession.java | 4 +--- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionIT.java b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionIT.java index 83fb37a29b5a9..11bac1900d70d 100644 --- a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionIT.java +++ b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionIT.java @@ -39,6 +39,7 @@ import org.elasticsearch.index.mapper.DateFieldMapper; import org.elasticsearch.index.mapper.extras.MapperExtrasPlugin; import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.MatchAllQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.RangeQueryBuilder; import org.elasticsearch.index.shard.IndexShard; @@ -151,13 +152,29 @@ public void testRow() { public void testRowWithFilter() { long value = randomLongBetween(0, Long.MAX_VALUE); EsqlQueryRequest request = syncEsqlQueryRequest(); - request.query("row " + value); - request.filter(new BoolQueryBuilder().boost(1.0f)); + request.query("ROW " + value); + request.filter(randomQueryFilter()); try (EsqlQueryResponse response = run(request)) { assertEquals(List.of(List.of(value)), getValuesList(response)); } } + public void testInvalidRowWithFilter() { + long value = randomLongBetween(0, Long.MAX_VALUE); + EsqlQueryRequest request = syncEsqlQueryRequest(); + request.query("ROW " + value + " | EVAL x==NULL"); + request.filter(randomQueryFilter()); + expectThrows( + VerificationException.class, + containsString("Unknown column [x]"), + () -> run(request) + ); + } + + private static QueryBuilder randomQueryFilter() { + return randomFrom(new MatchAllQueryBuilder(), new BoolQueryBuilder().boost(1.0f)); + } + public void testFromStatsGroupingAvgWithSort() { testFromStatsGroupingAvgImpl("from test | stats avg(count) by data | sort data | limit 2", "data", "avg(count)"); } diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlCCSUtils.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlCCSUtils.java index 7ea218ed6d61c..422a5c06e4e75 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlCCSUtils.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlCCSUtils.java @@ -201,6 +201,9 @@ static void updateExecutionInfoWithClustersWithNoMatchingIndices( IndexResolution indexResolution, boolean usedFilter ) { + if (executionInfo.clusterInfo.isEmpty()) { + return; + } // Get the clusters which are still running, and we will check whether they have any matching indices. // NOTE: we assume that updateExecutionInfoWithUnavailableClusters() was already run and took care of unavailable clusters. final Set clustersWithNoMatchingIndices = executionInfo.getClusterStates(Cluster.Status.RUNNING) diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java index f30ecc185ece5..76d3b9c3cdc73 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java @@ -568,9 +568,7 @@ private static void analyzeAndMaybeRetry( if (result.indices.isValid() || requestFilter != null) { // We won't run this check with no filter and no valid indices since this may lead to false positive - missing index report // when the resolution result is not valid for a different reason. - if (executionInfo.clusterInfo.isEmpty() == false) { - EsqlCCSUtils.updateExecutionInfoWithClustersWithNoMatchingIndices(executionInfo, result.indices, requestFilter != null); - } + EsqlCCSUtils.updateExecutionInfoWithClustersWithNoMatchingIndices(executionInfo, result.indices, requestFilter != null); } plan = analyzeAction.apply(result); } catch (Exception e) { From 936729841550672c7182d6632ab75c3611908793 Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Thu, 2 Oct 2025 11:44:37 +0000 Subject: [PATCH 2/2] [CI] Auto commit changes from spotless --- .../org/elasticsearch/xpack/esql/action/EsqlActionIT.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionIT.java b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionIT.java index 11bac1900d70d..8fb2352cc2247 100644 --- a/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionIT.java +++ b/x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionIT.java @@ -164,11 +164,7 @@ public void testInvalidRowWithFilter() { EsqlQueryRequest request = syncEsqlQueryRequest(); request.query("ROW " + value + " | EVAL x==NULL"); request.filter(randomQueryFilter()); - expectThrows( - VerificationException.class, - containsString("Unknown column [x]"), - () -> run(request) - ); + expectThrows(VerificationException.class, containsString("Unknown column [x]"), () -> run(request)); } private static QueryBuilder randomQueryFilter() {