From aa602ef58360dedd9be28bde4bde4faf0a90622d Mon Sep 17 00:00:00 2001 From: Tanguy Leroux Date: Wed, 23 Jun 2021 11:19:12 +0200 Subject: [PATCH] Shared cache's recovery range should be aligned with page size (#74439) Shared cache expects read and write operations to be aligned with a given page size (4096 bytes). The recovery range size setting should be validated against this constraint and the integration tests should not try to set a non-aligned setting value. Closes #74372 --- .../BaseSearchableSnapshotsIntegTestCase.java | 4 +++- .../cache/shared/FrozenCacheService.java | 16 ++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/x-pack/plugin/searchable-snapshots/src/internalClusterTest/java/org/elasticsearch/xpack/searchablesnapshots/BaseSearchableSnapshotsIntegTestCase.java b/x-pack/plugin/searchable-snapshots/src/internalClusterTest/java/org/elasticsearch/xpack/searchablesnapshots/BaseSearchableSnapshotsIntegTestCase.java index 538737c740bb5..9bbba934fded1 100644 --- a/x-pack/plugin/searchable-snapshots/src/internalClusterTest/java/org/elasticsearch/xpack/searchablesnapshots/BaseSearchableSnapshotsIntegTestCase.java +++ b/x-pack/plugin/searchable-snapshots/src/internalClusterTest/java/org/elasticsearch/xpack/searchablesnapshots/BaseSearchableSnapshotsIntegTestCase.java @@ -120,7 +120,9 @@ protected Settings nodeSettings(int nodeOrdinal, Settings otherSettings) { if (randomBoolean()) { builder.put( FrozenCacheService.FROZEN_CACHE_RECOVERY_RANGE_SIZE_SETTING.getKey(), - new ByteSizeValue(randomIntBetween(4, 1024), ByteSizeUnit.KB) + rarely() + ? pageAligned(new ByteSizeValue(randomIntBetween(4, 1024), ByteSizeUnit.KB)) + : pageAligned(new ByteSizeValue(randomIntBetween(1, 10), ByteSizeUnit.MB)) ); } return builder.build(); diff --git a/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/cache/shared/FrozenCacheService.java b/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/cache/shared/FrozenCacheService.java index 1322c50c711a2..9421202083dbd 100644 --- a/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/cache/shared/FrozenCacheService.java +++ b/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/cache/shared/FrozenCacheService.java @@ -81,6 +81,14 @@ public class FrozenCacheService implements Releasable { Setting.Property.NodeScope ); + public static final Setting FROZEN_CACHE_RECOVERY_RANGE_SIZE_SETTING = new Setting<>( + SHARED_CACHE_SETTINGS_PREFIX + "recovery_range_size", + ByteSizeValue.ofKb(128L).getStringRep(), + s -> ByteSizeValue.parseBytesSizeValue(s, SHARED_CACHE_SETTINGS_PREFIX + "recovery_range_size"), + getPageSizeAlignedByteSizeValueValidator(SHARED_CACHE_SETTINGS_PREFIX + "recovery_range_size"), + Setting.Property.NodeScope + ); + public static final Setting SNAPSHOT_CACHE_REGION_SIZE_SETTING = new Setting<>( SHARED_CACHE_SETTINGS_PREFIX + "region_size", SHARED_CACHE_RANGE_SIZE_SETTING, @@ -212,14 +220,6 @@ public void validate(ByteSizeValue value, Map, Object> settings, bool Setting.Property.NodeScope ); - public static final Setting FROZEN_CACHE_RECOVERY_RANGE_SIZE_SETTING = Setting.byteSizeSetting( - SHARED_CACHE_SETTINGS_PREFIX + "recovery_range_size", - new ByteSizeValue(128, ByteSizeUnit.KB), // default - MIN_SNAPSHOT_CACHE_RANGE_SIZE, // min - MAX_SNAPSHOT_CACHE_RANGE_SIZE, // max - Setting.Property.NodeScope - ); - public static final TimeValue MIN_SNAPSHOT_CACHE_DECAY_INTERVAL = TimeValue.timeValueSeconds(1L); public static final Setting SNAPSHOT_CACHE_DECAY_INTERVAL_SETTING = Setting.timeSetting( SHARED_CACHE_SETTINGS_PREFIX + "decay.interval",