Skip to content

Commit 4c591f5

Browse files
Fix ThreadPoolMergeExecutorServiceDiskSpaceTests testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution (#130001) (#130110)
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 6517d70 commit 4c591f5

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -844,6 +844,7 @@ public void testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution() thro
844844
when(mergeTask2.schedule()).thenReturn(RUN);
845845
boolean task1Runs = randomBoolean();
846846
long currentAvailableBudget = expectedAvailableBudget.get();
847+
// the over-budget here can be larger than the total initial available budget
847848
long overBudget = randomLongBetween(currentAvailableBudget + 1L, currentAvailableBudget + 100L);
848849
long underBudget = randomLongBetween(0L, currentAvailableBudget);
849850
if (task1Runs) {
@@ -879,11 +880,18 @@ public void testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution() thro
879880
// update the expected budget given that one task now finished
880881
expectedAvailableBudget.set(expectedAvailableBudget.get() + completedMergeTask.estimatedRemainingMergeSize());
881882
}
882-
// let the test finish cleanly
883-
assertBusy(() -> {
884-
assertThat(threadPoolMergeExecutorService.getDiskSpaceAvailableForNewMergeTasks(), is(aHasMoreSpace ? 112_500L : 103_000L));
885-
assertThat(threadPoolMergeExecutorService.allDone(), is(true));
886-
});
883+
assertBusy(
884+
() -> assertThat(
885+
threadPoolMergeExecutorService.getDiskSpaceAvailableForNewMergeTasks(),
886+
is(aHasMoreSpace ? 112_500L : 103_000L)
887+
)
888+
);
889+
// let the test finish cleanly (some tasks can be over budget even if all the other tasks finished running)
890+
aFileStore.totalSpace = Long.MAX_VALUE;
891+
bFileStore.totalSpace = Long.MAX_VALUE;
892+
aFileStore.usableSpace = Long.MAX_VALUE;
893+
bFileStore.usableSpace = Long.MAX_VALUE;
894+
assertBusy(() -> assertThat(threadPoolMergeExecutorService.allDone(), is(true)));
887895
}
888896
if (setThreadPoolMergeSchedulerSetting) {
889897
assertWarnings(

0 commit comments

Comments
 (0)