Skip to content

Commit 34d9652

Browse files
authored
ESQL: Fix limit task test (#117270)
Fix a test for the task results when running the `LIMIT` operation. We were releasing a few permits to get the query started. And when you combine that with the page worth of permits that the test was releasing we'd sometimes finish the entire limited query, stopping the task too early to find a running task. Closes #107293
1 parent f3eb27e commit 34d9652

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ public class EsqlActionTaskIT extends AbstractPausableIntegTestCase {
7979
private String REDUCE_DESCRIPTION;
8080
private boolean nodeLevelReduction;
8181

82+
/**
83+
* Number of docs released by {@link #startEsql}.
84+
*/
85+
private int prereleasedDocs;
86+
8287
@Before
8388
public void setup() {
8489
assumeTrue("requires query pragmas", canUseQueryPragmas());
@@ -104,6 +109,7 @@ public void testTaskContents() throws Exception {
104109
ActionFuture<EsqlQueryResponse> response = startEsql();
105110
try {
106111
getTasksStarting();
112+
logger.info("unblocking script");
107113
scriptPermits.release(pageSize());
108114
List<TaskInfo> foundTasks = getTasksRunning();
109115
int luceneSources = 0;
@@ -216,9 +222,15 @@ private ActionFuture<EsqlQueryResponse> startEsql() {
216222
return startEsql("from test | stats sum(pause_me)");
217223
}
218224

225+
/**
226+
* Start an ESQL query, releasing a few docs from the {@code pause_me}
227+
* script so it'll actually start but won't finish it's first page.
228+
*/
219229
private ActionFuture<EsqlQueryResponse> startEsql(String query) {
220230
scriptPermits.drainPermits();
221-
scriptPermits.release(between(1, 5));
231+
// Allow a few docs to calculate os the query gets "started"
232+
prereleasedDocs = between(1, pageSize() / 2);
233+
scriptPermits.release(prereleasedDocs);
222234
var settingsBuilder = Settings.builder()
223235
// Force shard partitioning because that's all the tests know how to match. It is easier to reason about too.
224236
.put("data_partitioning", "shard")
@@ -444,6 +456,7 @@ public void testTaskContentsForTopNQuery() throws Exception {
444456
ActionFuture<EsqlQueryResponse> response = startEsql("from test | sort pause_me | keep pause_me");
445457
try {
446458
getTasksStarting();
459+
logger.info("unblocking script");
447460
scriptPermits.release(pageSize());
448461
getTasksRunning();
449462
} finally {
@@ -455,7 +468,6 @@ public void testTaskContentsForTopNQuery() throws Exception {
455468
}
456469
}
457470

458-
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/107293")
459471
public void testTaskContentsForLimitQuery() throws Exception {
460472
String limit = Integer.toString(randomIntBetween(pageSize() + 1, 2 * numberOfDocs()));
461473
READ_DESCRIPTION = """
@@ -475,7 +487,8 @@ public void testTaskContentsForLimitQuery() throws Exception {
475487
ActionFuture<EsqlQueryResponse> response = startEsql("from test | keep pause_me | limit " + limit);
476488
try {
477489
getTasksStarting();
478-
scriptPermits.release(pageSize());
490+
logger.info("unblocking script");
491+
scriptPermits.release(pageSize() - prereleasedDocs);
479492
getTasksRunning();
480493
} finally {
481494
scriptPermits.release(numberOfDocs());
@@ -504,6 +517,7 @@ public void testTaskContentsForGroupingStatsQuery() throws Exception {
504517
ActionFuture<EsqlQueryResponse> response = startEsql("from test | stats max(foo) by pause_me");
505518
try {
506519
getTasksStarting();
520+
logger.info("unblocking script");
507521
scriptPermits.release(pageSize());
508522
getTasksRunning();
509523
} finally {

0 commit comments

Comments
 (0)