From e0e019c911db5b7d1f6efb24e71e7c70a15a325d Mon Sep 17 00:00:00 2001 From: Armin Braun Date: Tue, 15 Jun 2021 12:19:06 +0200 Subject: [PATCH] Fix Searchable Snapshot Test Range Size Overflow Page alignment of the setting value can push it past the maximum since we round up. Closes #74016 --- .../AbstractSearchableSnapshotsTestCase.java | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/x-pack/plugin/searchable-snapshots/src/test/java/org/elasticsearch/xpack/searchablesnapshots/AbstractSearchableSnapshotsTestCase.java b/x-pack/plugin/searchable-snapshots/src/test/java/org/elasticsearch/xpack/searchablesnapshots/AbstractSearchableSnapshotsTestCase.java index 227b7798d312e..d30e86e5926af 100644 --- a/x-pack/plugin/searchable-snapshots/src/test/java/org/elasticsearch/xpack/searchablesnapshots/AbstractSearchableSnapshotsTestCase.java +++ b/x-pack/plugin/searchable-snapshots/src/test/java/org/elasticsearch/xpack/searchablesnapshots/AbstractSearchableSnapshotsTestCase.java @@ -71,6 +71,7 @@ import static com.carrotsearch.randomizedtesting.RandomizedTest.randomAsciiLettersOfLengthBetween; import static org.elasticsearch.xpack.searchablesnapshots.cache.common.TestUtils.randomPopulateAndReads; +import static org.elasticsearch.xpack.searchablesnapshots.cache.shared.SharedBytes.PAGE_SIZE; import static org.elasticsearch.xpack.searchablesnapshots.cache.shared.SharedBytes.pageAligned; public abstract class AbstractSearchableSnapshotsTestCase extends ESIndexInputTestCase { @@ -211,25 +212,20 @@ protected static ByteSizeValue randomFrozenCacheSize() { * @return a random {@link ByteSizeValue} that can be used to set {@link CacheService#SNAPSHOT_CACHE_RANGE_SIZE_SETTING} */ protected static ByteSizeValue randomCacheRangeSize() { - return pageAligned( - new ByteSizeValue( - randomLongBetween( - CacheService.MIN_SNAPSHOT_CACHE_RANGE_SIZE.getBytes(), - CacheService.MAX_SNAPSHOT_CACHE_RANGE_SIZE.getBytes() - ) - ) - ); + return pageAlignedBetween(CacheService.MIN_SNAPSHOT_CACHE_RANGE_SIZE, CacheService.MAX_SNAPSHOT_CACHE_RANGE_SIZE); } protected static ByteSizeValue randomFrozenCacheRangeSize() { - return pageAligned( - new ByteSizeValue( - randomLongBetween( - FrozenCacheService.MIN_SNAPSHOT_CACHE_RANGE_SIZE.getBytes(), - FrozenCacheService.MAX_SNAPSHOT_CACHE_RANGE_SIZE.getBytes() - ) - ) - ); + return pageAlignedBetween(FrozenCacheService.MIN_SNAPSHOT_CACHE_RANGE_SIZE, FrozenCacheService.MAX_SNAPSHOT_CACHE_RANGE_SIZE); + } + + private static ByteSizeValue pageAlignedBetween(ByteSizeValue min, ByteSizeValue max) { + ByteSizeValue aligned = pageAligned(new ByteSizeValue(randomLongBetween(min.getBytes(), max.getBytes()))); + if (aligned.compareTo(max) > 0) { + // minus one page in case page alignment moved us past the max setting value + return new ByteSizeValue(aligned.getBytes() - PAGE_SIZE); + } + return aligned; } protected static SearchableSnapshotRecoveryState createRecoveryState(boolean finalizedDone) {