From a751d872acbc3c46e11ea27f75cc86c16cd21124 Mon Sep 17 00:00:00 2001 From: Albert Zaharovits Date: Tue, 29 Jul 2025 10:42:43 +0300 Subject: [PATCH] Avoid re-enqueueing merge tasks (#132020) Avoid mocking merge tasks as backlogged (which are then re-enqueued) because it makes the merge task's queue available budget value unsteady, which breaks the test when it later schedules merge tasks that are under/over budget. Closes https://github.com/elastic/elasticsearch/issues/130205 https://github.com/elastic/elasticsearch/issues/131982 --- muted-tests.yml | 3 --- ...ThreadPoolMergeExecutorServiceDiskSpaceTests.java | 12 ++---------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/muted-tests.yml b/muted-tests.yml index a92fa0a131920..324ff1bde4a1f 100644 --- a/muted-tests.yml +++ b/muted-tests.yml @@ -405,9 +405,6 @@ tests: - class: org.elasticsearch.xpack.esql.qa.single_node.GenerativeIT method: test issue: https://github.com/elastic/elasticsearch/issues/130067 -- class: org.elasticsearch.index.engine.ThreadPoolMergeExecutorServiceDiskSpaceTests - method: testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution - issue: https://github.com/elastic/elasticsearch/issues/130205 - class: org.elasticsearch.search.SearchWithRejectionsIT method: testOpenContextsAfterRejections issue: https://github.com/elastic/elasticsearch/issues/130821 diff --git a/server/src/test/java/org/elasticsearch/index/engine/ThreadPoolMergeExecutorServiceDiskSpaceTests.java b/server/src/test/java/org/elasticsearch/index/engine/ThreadPoolMergeExecutorServiceDiskSpaceTests.java index 9f34c56cf041e..cc8d56c2fb37b 100644 --- a/server/src/test/java/org/elasticsearch/index/engine/ThreadPoolMergeExecutorServiceDiskSpaceTests.java +++ b/server/src/test/java/org/elasticsearch/index/engine/ThreadPoolMergeExecutorServiceDiskSpaceTests.java @@ -771,16 +771,8 @@ public void testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution() thro while (submittedMergesCount > 0 && expectedAvailableBudget.get() > 0L) { ThreadPoolMergeScheduler.MergeTask mergeTask = mock(ThreadPoolMergeScheduler.MergeTask.class); when(mergeTask.supportsIOThrottling()).thenReturn(randomBoolean()); - doAnswer(mock -> { - Schedule schedule = randomFrom(Schedule.values()); - if (schedule == BACKLOG) { - testThreadPool.executor(ThreadPool.Names.GENERIC).execute(() -> { - // re-enqueue backlogged merge task - threadPoolMergeExecutorService.reEnqueueBackloggedMergeTask(mergeTask); - }); - } - return schedule; - }).when(mergeTask).schedule(); + // avoid backlogging and re-enqueing merge tasks in this test because it makes the queue's available budget unsteady + when(mergeTask.schedule()).thenReturn(randomFrom(RUN, ABORT)); // let some task complete, which will NOT hold up any budget if (randomBoolean()) { // this task will NOT hold up any budget because it runs quickly (it is not blocked)