Skip to content

Commit ccdb22f

Browse files
Fix ThreadPoolMergeExecutorServiceDiskSpaceTests testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution (#130001) (#130107)
The test might produce over-budget tasks that cannot run even if all the other tasks that were blocked (and hold up budget) while running complete. Rather than prevent submitting such over-budget tasks, this fix simply sets the merge task's queue available budget to `Long.MAX_VALUE`, in order to ensure that all merge tasks run before the test ends. Fixes #129148
1 parent de0c2d5 commit ccdb22f

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

muted-tests.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,6 @@ tests:
282282
- class: org.elasticsearch.index.engine.ThreadPoolMergeExecutorServiceDiskSpaceTests
283283
method: testAvailableDiskSpaceMonitorWhenFileSystemStatErrors
284284
issue: https://github.com/elastic/elasticsearch/issues/129149
285-
- class: org.elasticsearch.index.engine.ThreadPoolMergeExecutorServiceDiskSpaceTests
286-
method: testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution
287-
issue: https://github.com/elastic/elasticsearch/issues/129148
288285
- class: org.elasticsearch.index.engine.ThreadPoolMergeExecutorServiceTests
289286
method: testIORateIsAdjustedForAllRunningMergeTasks
290287
issue: https://github.com/elastic/elasticsearch/issues/129531

server/src/test/java/org/elasticsearch/index/engine/ThreadPoolMergeExecutorServiceDiskSpaceTests.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,7 @@ public void testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution() thro
847847
when(mergeTask2.schedule()).thenReturn(RUN);
848848
boolean task1Runs = randomBoolean();
849849
long currentAvailableBudget = expectedAvailableBudget.get();
850+
// the over-budget here can be larger than the total initial available budget
850851
long overBudget = randomLongBetween(currentAvailableBudget + 1L, currentAvailableBudget + 100L);
851852
long underBudget = randomLongBetween(0L, currentAvailableBudget);
852853
if (task1Runs) {
@@ -882,11 +883,18 @@ public void testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution() thro
882883
// update the expected budget given that one task now finished
883884
expectedAvailableBudget.set(expectedAvailableBudget.get() + completedMergeTask.estimatedRemainingMergeSize());
884885
}
885-
// let the test finish cleanly
886-
assertBusy(() -> {
887-
assertThat(threadPoolMergeExecutorService.getDiskSpaceAvailableForNewMergeTasks(), is(aHasMoreSpace ? 112_500L : 103_000L));
888-
assertThat(threadPoolMergeExecutorService.allDone(), is(true));
889-
});
886+
assertBusy(
887+
() -> assertThat(
888+
threadPoolMergeExecutorService.getDiskSpaceAvailableForNewMergeTasks(),
889+
is(aHasMoreSpace ? 112_500L : 103_000L)
890+
)
891+
);
892+
// let the test finish cleanly (some tasks can be over budget even if all the other tasks finished running)
893+
aFileStore.totalSpace = Long.MAX_VALUE;
894+
bFileStore.totalSpace = Long.MAX_VALUE;
895+
aFileStore.usableSpace = Long.MAX_VALUE;
896+
bFileStore.usableSpace = Long.MAX_VALUE;
897+
assertBusy(() -> assertThat(threadPoolMergeExecutorService.allDone(), is(true)));
890898
}
891899
if (setThreadPoolMergeSchedulerSetting) {
892900
assertWarnings(

0 commit comments

Comments
 (0)