|
@@ -10,6 +10,7 @@ package org.elasticsearch.xpack.searchablesnapshots.cache.shared;
|
|
|
import org.elasticsearch.cluster.coordination.DeterministicTaskQueue;
|
|
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
+import org.elasticsearch.common.unit.ByteSizeValue;
|
|
|
import org.elasticsearch.env.NodeEnvironment;
|
|
|
import org.elasticsearch.env.TestEnvironment;
|
|
|
import org.elasticsearch.index.shard.ShardId;
|
|
@@ -28,11 +29,15 @@ import static org.elasticsearch.node.Node.NODE_NAME_SETTING;
|
|
|
|
|
|
public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
|
|
|
+ private static long size(long numPages) {
|
|
|
+ return numPages * SharedBytes.PAGE_SIZE;
|
|
|
+ }
|
|
|
+
|
|
|
public void testBasicEviction() throws IOException {
|
|
|
Settings settings = Settings.builder()
|
|
|
.put(NODE_NAME_SETTING.getKey(), "node")
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), "500b")
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), "100b")
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), new ByteSizeValue(size(500)).getStringRep())
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), new ByteSizeValue(size(100)).getStringRep())
|
|
|
.put("path.home", createTempDir())
|
|
|
.build();
|
|
|
final DeterministicTaskQueue taskQueue = new DeterministicTaskQueue(settings, random());
|
|
@@ -42,14 +47,14 @@ public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
) {
|
|
|
final CacheKey cacheKey = generateCacheKey();
|
|
|
assertEquals(5, cacheService.freeRegionCount());
|
|
|
- final CacheFileRegion region0 = cacheService.get(cacheKey, 250, 0);
|
|
|
- assertEquals(100L, region0.tracker.getLength());
|
|
|
+ final CacheFileRegion region0 = cacheService.get(cacheKey, size(250), 0);
|
|
|
+ assertEquals(size(100), region0.tracker.getLength());
|
|
|
assertEquals(4, cacheService.freeRegionCount());
|
|
|
- final CacheFileRegion region1 = cacheService.get(cacheKey, 250, 1);
|
|
|
- assertEquals(100L, region1.tracker.getLength());
|
|
|
+ final CacheFileRegion region1 = cacheService.get(cacheKey, size(250), 1);
|
|
|
+ assertEquals(size(100), region1.tracker.getLength());
|
|
|
assertEquals(3, cacheService.freeRegionCount());
|
|
|
- final CacheFileRegion region2 = cacheService.get(cacheKey, 250, 2);
|
|
|
- assertEquals(50L, region2.tracker.getLength());
|
|
|
+ final CacheFileRegion region2 = cacheService.get(cacheKey, size(250), 2);
|
|
|
+ assertEquals(size(50), region2.tracker.getLength());
|
|
|
assertEquals(2, cacheService.freeRegionCount());
|
|
|
|
|
|
assertTrue(region1.tryEvict());
|
|
@@ -76,8 +81,8 @@ public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
public void testAutoEviction() throws IOException {
|
|
|
Settings settings = Settings.builder()
|
|
|
.put(NODE_NAME_SETTING.getKey(), "node")
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), "200b")
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), "100b")
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), new ByteSizeValue(size(200)).getStringRep())
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), new ByteSizeValue(size(100)).getStringRep())
|
|
|
.put("path.home", createTempDir())
|
|
|
.build();
|
|
|
final DeterministicTaskQueue taskQueue = new DeterministicTaskQueue(settings, random());
|
|
@@ -87,18 +92,18 @@ public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
) {
|
|
|
final CacheKey cacheKey = generateCacheKey();
|
|
|
assertEquals(2, cacheService.freeRegionCount());
|
|
|
- final CacheFileRegion region0 = cacheService.get(cacheKey, 250, 0);
|
|
|
- assertEquals(100L, region0.tracker.getLength());
|
|
|
+ final CacheFileRegion region0 = cacheService.get(cacheKey, size(250), 0);
|
|
|
+ assertEquals(size(100), region0.tracker.getLength());
|
|
|
assertEquals(1, cacheService.freeRegionCount());
|
|
|
- final CacheFileRegion region1 = cacheService.get(cacheKey, 250, 1);
|
|
|
- assertEquals(100L, region1.tracker.getLength());
|
|
|
+ final CacheFileRegion region1 = cacheService.get(cacheKey, size(250), 1);
|
|
|
+ assertEquals(size(100), region1.tracker.getLength());
|
|
|
assertEquals(0, cacheService.freeRegionCount());
|
|
|
assertFalse(region0.isEvicted());
|
|
|
assertFalse(region1.isEvicted());
|
|
|
|
|
|
// acquire region 2, which should evict region 0 (oldest)
|
|
|
- final CacheFileRegion region2 = cacheService.get(cacheKey, 250, 2);
|
|
|
- assertEquals(50L, region2.tracker.getLength());
|
|
|
+ final CacheFileRegion region2 = cacheService.get(cacheKey, size(250), 2);
|
|
|
+ assertEquals(size(50), region2.tracker.getLength());
|
|
|
assertEquals(0, cacheService.freeRegionCount());
|
|
|
assertTrue(region0.isEvicted());
|
|
|
assertFalse(region1.isEvicted());
|
|
@@ -112,8 +117,8 @@ public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
public void testForceEviction() throws IOException {
|
|
|
Settings settings = Settings.builder()
|
|
|
.put(NODE_NAME_SETTING.getKey(), "node")
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), "500b")
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), "100b")
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), new ByteSizeValue(size(500)).getStringRep())
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), new ByteSizeValue(size(100)).getStringRep())
|
|
|
.put("path.home", createTempDir())
|
|
|
.build();
|
|
|
final DeterministicTaskQueue taskQueue = new DeterministicTaskQueue(settings, random());
|
|
@@ -124,9 +129,9 @@ public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
final CacheKey cacheKey1 = generateCacheKey();
|
|
|
final CacheKey cacheKey2 = generateCacheKey();
|
|
|
assertEquals(5, cacheService.freeRegionCount());
|
|
|
- final CacheFileRegion region0 = cacheService.get(cacheKey1, 250, 0);
|
|
|
+ final CacheFileRegion region0 = cacheService.get(cacheKey1, size(250), 0);
|
|
|
assertEquals(4, cacheService.freeRegionCount());
|
|
|
- final CacheFileRegion region1 = cacheService.get(cacheKey2, 250, 1);
|
|
|
+ final CacheFileRegion region1 = cacheService.get(cacheKey2, size(250), 1);
|
|
|
assertEquals(3, cacheService.freeRegionCount());
|
|
|
assertFalse(region0.isEvicted());
|
|
|
assertFalse(region1.isEvicted());
|
|
@@ -140,8 +145,8 @@ public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
public void testDecay() throws IOException {
|
|
|
Settings settings = Settings.builder()
|
|
|
.put(NODE_NAME_SETTING.getKey(), "node")
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), "500b")
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), "100b")
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), new ByteSizeValue(size(500)).getStringRep())
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), new ByteSizeValue(size(100)).getStringRep())
|
|
|
.put("path.home", createTempDir())
|
|
|
.build();
|
|
|
final DeterministicTaskQueue taskQueue = new DeterministicTaskQueue(settings, random());
|
|
@@ -152,9 +157,9 @@ public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
final CacheKey cacheKey1 = generateCacheKey();
|
|
|
final CacheKey cacheKey2 = generateCacheKey();
|
|
|
assertEquals(5, cacheService.freeRegionCount());
|
|
|
- final CacheFileRegion region0 = cacheService.get(cacheKey1, 250, 0);
|
|
|
+ final CacheFileRegion region0 = cacheService.get(cacheKey1, size(250), 0);
|
|
|
assertEquals(4, cacheService.freeRegionCount());
|
|
|
- final CacheFileRegion region1 = cacheService.get(cacheKey2, 250, 1);
|
|
|
+ final CacheFileRegion region1 = cacheService.get(cacheKey2, size(250), 1);
|
|
|
assertEquals(3, cacheService.freeRegionCount());
|
|
|
|
|
|
assertEquals(0, cacheService.getFreq(region0));
|
|
@@ -163,16 +168,16 @@ public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
taskQueue.advanceTime();
|
|
|
taskQueue.runAllRunnableTasks();
|
|
|
|
|
|
- final CacheFileRegion region0Again = cacheService.get(cacheKey1, 250, 0);
|
|
|
+ final CacheFileRegion region0Again = cacheService.get(cacheKey1, size(250), 0);
|
|
|
assertSame(region0Again, region0);
|
|
|
assertEquals(1, cacheService.getFreq(region0));
|
|
|
assertEquals(0, cacheService.getFreq(region1));
|
|
|
|
|
|
taskQueue.advanceTime();
|
|
|
taskQueue.runAllRunnableTasks();
|
|
|
- cacheService.get(cacheKey1, 250, 0);
|
|
|
+ cacheService.get(cacheKey1, size(250), 0);
|
|
|
assertEquals(2, cacheService.getFreq(region0));
|
|
|
- cacheService.get(cacheKey1, 250, 0);
|
|
|
+ cacheService.get(cacheKey1, size(250), 0);
|
|
|
assertEquals(2, cacheService.getFreq(region0));
|
|
|
|
|
|
// advance 2 ticks (decay only starts after 2 ticks)
|
|
@@ -196,15 +201,17 @@ public class FrozenCacheServiceTests extends ESTestCase {
|
|
|
Set.of(DataTier.DATA_HOT_NODE_ROLE, DataTier.DATA_WARM_NODE_ROLE, DataTier.DATA_COLD_NODE_ROLE, DataTier.DATA_FROZEN_NODE_ROLE)
|
|
|
);
|
|
|
final Settings settings = Settings.builder()
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), "500b")
|
|
|
- .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), "100b")
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey(), new ByteSizeValue(size(500)).getStringRep())
|
|
|
+ .put(FrozenCacheService.SNAPSHOT_CACHE_REGION_SIZE_SETTING.getKey(), new ByteSizeValue(size(100)).getStringRep())
|
|
|
.putList(NodeRoleSettings.NODE_ROLES_SETTING.getKey(), DataTier.DATA_HOT_NODE_ROLE.roleName())
|
|
|
.build();
|
|
|
FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.get(settings);
|
|
|
assertWarnings(
|
|
|
"setting ["
|
|
|
+ FrozenCacheService.SNAPSHOT_CACHE_SIZE_SETTING.getKey()
|
|
|
- + "] to be positive [500b] on node without the data_frozen role is deprecated, roles are [data_hot]"
|
|
|
+ + "] to be positive ["
|
|
|
+ + new ByteSizeValue(size(500)).getStringRep()
|
|
|
+ + "] on node without the data_frozen role is deprecated, roles are [data_hot]"
|
|
|
);
|
|
|
}
|
|
|
|