From 681fa02ca0bd2e985d6a9f3e969c41f743b8713d Mon Sep 17 00:00:00 2001 From: Albert Zaharovits Date: Thu, 26 Jun 2025 14:05:40 +0300 Subject: [PATCH] Fix ThreadPoolMergeExecutorServiceDiskSpaceTests testAvailableDiskSpaceMonitorWhenFileSystemStatErrors (#130025) The test method needs to distinguish between the available disk space update values, when they are coming from either FS. So the update values from the 2 FSs mustn't be equal. Fixes #129149 --- ...oolMergeExecutorServiceDiskSpaceTests.java | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) 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 c7058e1ce44ba..319427899a339 100644 --- a/server/src/test/java/org/elasticsearch/index/engine/ThreadPoolMergeExecutorServiceDiskSpaceTests.java +++ b/server/src/test/java/org/elasticsearch/index/engine/ThreadPoolMergeExecutorServiceDiskSpaceTests.java @@ -324,10 +324,19 @@ public void testDiskSpaceMonitorStartsAsDisabled() throws Exception { } public void testAvailableDiskSpaceMonitorWhenFileSystemStatErrors() throws Exception { - aFileStore.usableSpace = randomLongBetween(1L, 100L); - aFileStore.totalSpace = randomLongBetween(1L, 100L); - bFileStore.usableSpace = randomLongBetween(1L, 100L); - bFileStore.totalSpace = randomLongBetween(1L, 100L); + long aUsableSpace; + long bUsableSpace; + do { + aFileStore.usableSpace = randomLongBetween(1L, 1000L); + aFileStore.totalSpace = randomLongBetween(1L, 1000L); + bFileStore.usableSpace = randomLongBetween(1L, 1000L); + bFileStore.totalSpace = randomLongBetween(1L, 1000L); + // the default 5% (same as flood stage level) + aUsableSpace = Math.max(aFileStore.usableSpace - aFileStore.totalSpace / 20, 0L); + bUsableSpace = Math.max(bFileStore.usableSpace - bFileStore.totalSpace / 20, 0L); + } while (aUsableSpace == bUsableSpace); // they must be different in order to distinguish the available disk space updates + long finalBUsableSpace = bUsableSpace; + long finalAUsableSpace = aUsableSpace; boolean aErrorsFirst = randomBoolean(); if (aErrorsFirst) { // the "a" file system will error when collecting stats @@ -355,18 +364,10 @@ public void testAvailableDiskSpaceMonitorWhenFileSystemStatErrors() throws Excep assertThat(availableDiskSpaceUpdates.size(), is(1)); if (aErrorsFirst) { // uses the stats from "b" - assertThat( - getLast(availableDiskSpaceUpdates).getBytes(), - // the default 5% (same as flood stage level) - is(Math.max(bFileStore.usableSpace - bFileStore.totalSpace / 20, 0L)) - ); + assertThat(getLast(availableDiskSpaceUpdates).getBytes(), is(finalBUsableSpace)); } else { // uses the stats from "a" - assertThat( - getLast(availableDiskSpaceUpdates).getBytes(), - // the default 5% (same as flood stage level) - is(Math.max(aFileStore.usableSpace - aFileStore.totalSpace / 20, 0L)) - ); + assertThat(getLast(availableDiskSpaceUpdates).getBytes(), is(finalAUsableSpace)); } } }); @@ -393,21 +394,14 @@ public void testAvailableDiskSpaceMonitorWhenFileSystemStatErrors() throws Excep } assertBusy(() -> { synchronized (availableDiskSpaceUpdates) { + // the updates are different values assertThat(availableDiskSpaceUpdates.size(), is(3)); if (aErrorsFirst) { // uses the stats from "a" - assertThat( - getLast(availableDiskSpaceUpdates).getBytes(), - // the default 5% (same as flood stage level) - is(Math.max(aFileStore.usableSpace - aFileStore.totalSpace / 20, 0L)) - ); + assertThat(getLast(availableDiskSpaceUpdates).getBytes(), is(finalAUsableSpace)); } else { // uses the stats from "b" - assertThat( - getLast(availableDiskSpaceUpdates).getBytes(), - // the default 5% (same as flood stage level) - is(Math.max(bFileStore.usableSpace - bFileStore.totalSpace / 20, 0L)) - ); + assertThat(getLast(availableDiskSpaceUpdates).getBytes(), is(finalBUsableSpace)); } } });