This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.1 by this push:
new 7464b58ea18 branch-3.1: [improvement] (metadata cache) use expire
after access strategy on meta cache #50757 (#52768)
7464b58ea18 is described below
commit 7464b58ea18e5835399ae01db324b24eb1ac9196
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Sat Jul 5 20:25:26 2025 +0800
branch-3.1: [improvement] (metadata cache) use expire after access strategy
on meta cache #50757 (#52768)
bp #50757
Co-authored-by: wlong <[email protected]>
Co-authored-by: wanglong16 <[email protected]>
---
.../src/main/java/org/apache/doris/common/Config.java | 17 +++++++++++------
.../java/org/apache/doris/common/CacheFactory.java | 10 +++++-----
.../org/apache/doris/datasource/ExternalCatalog.java | 4 ++--
.../org/apache/doris/datasource/ExternalDatabase.java | 4 ++--
.../apache/doris/datasource/ExternalMetaCacheMgr.java | 5 +++--
.../apache/doris/datasource/ExternalRowCountCache.java | 4 ++--
.../apache/doris/datasource/ExternalSchemaCache.java | 4 ++--
.../doris/datasource/hive/HiveMetaStoreCache.java | 10 +++++-----
.../hudi/source/HudiCachedFsViewProcessor.java | 4 ++--
.../hudi/source/HudiCachedMetaClientProcessor.java | 4 ++--
.../hudi/source/HudiCachedPartitionProcessor.java | 4 ++--
.../doris/datasource/iceberg/IcebergMetadataCache.java | 12 ++++++------
.../datasource/maxcompute/MaxComputeMetadataCache.java | 2 +-
.../apache/doris/datasource/metacache/MetaCache.java | 6 +++---
.../doris/datasource/paimon/PaimonMetadataCache.java | 4 ++--
.../main/java/org/apache/doris/fs/FileSystemCache.java | 2 +-
.../java/org/apache/doris/common/CacheFactoryTest.java | 18 +++++++++---------
17 files changed, 60 insertions(+), 54 deletions(-)
diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index 879e48b204c..cb41a970ace 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -2210,12 +2210,17 @@ public class Config extends ConfigBase {
@ConfField(mutable = false, masterOnly = false)
public static long max_external_schema_cache_num = 10000;
- /**
- * The expiration time of a cache object after last access of it.
- * For external schema cache and hive meta cache.
- */
- @ConfField(mutable = false, masterOnly = false)
- public static long external_cache_expire_time_minutes_after_access = 10;
// 10 mins
+ @ConfField(description = {
+ "外部表元数据缓存对象在最后访问后过期的时间。",
+ "The expiration time of a cache object after last access of it.
For external meta cache."
+ })
+ public static long external_cache_expire_time_seconds_after_access =
86400L; // 24 hours
+
+ @ConfField(description = {
+ "外部表元数据缓存对象的自动刷新时间",
+ "The auto refresh time of external meta cache."
+ })
+ public static long external_cache_refresh_time_minutes = 10; // 10 mins
/**
* Github workflow test type, for setting some session variables
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/CacheFactory.java
b/fe/fe-core/src/main/java/org/apache/doris/common/CacheFactory.java
index 50f46647975..2b5e6968d17 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/CacheFactory.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/CacheFactory.java
@@ -46,7 +46,7 @@ import java.util.concurrent.ExecutorService;
*/
public class CacheFactory {
- private OptionalLong expireAfterWriteSec;
+ private OptionalLong expireAfterAccessSec;
private OptionalLong refreshAfterWriteSec;
private long maxSize;
private boolean enableStats;
@@ -56,12 +56,12 @@ public class CacheFactory {
private Ticker ticker;
public CacheFactory(
- OptionalLong expireAfterWriteSec,
+ OptionalLong expireAfterAccessSec,
OptionalLong refreshAfterWriteSec,
long maxSize,
boolean enableStats,
Ticker ticker) {
- this.expireAfterWriteSec = expireAfterWriteSec;
+ this.expireAfterAccessSec = expireAfterAccessSec;
this.refreshAfterWriteSec = refreshAfterWriteSec;
this.maxSize = maxSize;
this.enableStats = enableStats;
@@ -98,8 +98,8 @@ public class CacheFactory {
Caffeine<Object, Object> builder = Caffeine.newBuilder();
builder.maximumSize(maxSize);
- if (expireAfterWriteSec.isPresent()) {
-
builder.expireAfterWrite(Duration.ofSeconds(expireAfterWriteSec.getAsLong()));
+ if (expireAfterAccessSec.isPresent()) {
+
builder.expireAfterAccess(Duration.ofSeconds(expireAfterAccessSec.getAsLong()));
}
if (refreshAfterWriteSec.isPresent()) {
builder.refreshAfterWrite(Duration.ofSeconds(refreshAfterWriteSec.getAsLong()));
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
index ec91c396eb1..29287dc57b6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
@@ -315,8 +315,8 @@ public abstract class ExternalCatalog
if (metaCache == null) {
metaCache =
Env.getCurrentEnv().getExtMetaCacheMgr().buildMetaCache(
name,
- OptionalLong.of(86400L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60L),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+
OptionalLong.of(Config.external_cache_refresh_time_minutes * 60L),
Config.max_meta_object_cache_num,
ignored -> getFilteredDatabaseNames(),
localDbName -> Optional.ofNullable(
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java
index 7dea087c5ee..7a32c22d9c6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java
@@ -167,8 +167,8 @@ public abstract class ExternalDatabase<T extends
ExternalTable>
if (metaCache == null) {
metaCache =
Env.getCurrentEnv().getExtMetaCacheMgr().buildMetaCache(
name,
- OptionalLong.of(86400L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60L),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+
OptionalLong.of(Config.external_cache_refresh_time_minutes * 60L),
Config.max_meta_object_cache_num,
ignored -> listTableNames(),
localTableName -> Optional.ofNullable(
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalMetaCacheMgr.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalMetaCacheMgr.java
index 990c825927e..aa53a8f3142 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalMetaCacheMgr.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalMetaCacheMgr.java
@@ -344,11 +344,12 @@ public class ExternalMetaCacheMgr {
}
public <T> MetaCache<T> buildMetaCache(String name,
- OptionalLong expireAfterWriteSec, OptionalLong
refreshAfterWriteSec, long maxSize,
+ OptionalLong expireAfterAccessSec, OptionalLong
refreshAfterWriteSec, long maxSize,
CacheLoader<String, List<Pair<String, String>>> namesCacheLoader,
CacheLoader<String, Optional<T>> metaObjCacheLoader,
RemovalListener<String, Optional<T>> removalListener) {
- MetaCache<T> metaCache = new MetaCache<>(name, commonRefreshExecutor,
expireAfterWriteSec, refreshAfterWriteSec,
+ MetaCache<T> metaCache = new MetaCache<>(
+ name, commonRefreshExecutor, expireAfterAccessSec,
refreshAfterWriteSec,
maxSize, namesCacheLoader, metaObjCacheLoader,
removalListener);
return metaCache;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalRowCountCache.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalRowCountCache.java
index a00d9f12857..4fc191b2f7f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalRowCountCache.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalRowCountCache.java
@@ -43,8 +43,8 @@ public class ExternalRowCountCache {
// 1. set expireAfterWrite to 1 day, avoid too many entries
// 2. set refreshAfterWrite to 10min(default), so that the cache will
be refreshed after 10min
CacheFactory rowCountCacheFactory = new CacheFactory(
- OptionalLong.of(86400L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60),
Config.max_external_table_row_count_cache_num,
false,
null);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalSchemaCache.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalSchemaCache.java
index da9a25d71be..07946ad6619 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalSchemaCache.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalSchemaCache.java
@@ -56,8 +56,8 @@ public class ExternalSchemaCache {
(catalog.getProperties().get(ExternalCatalog.SCHEMA_CACHE_TTL_SECOND)),
ExternalCatalog.CACHE_NO_TTL);
CacheFactory schemaCacheFactory = new CacheFactory(
OptionalLong.of(schemaCacheTtlSecond >=
ExternalCatalog.CACHE_TTL_DISABLE_CACHE
- ? schemaCacheTtlSecond : 86400),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60),
+ ? schemaCacheTtlSecond :
Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60),
Config.max_external_schema_cache_num,
false,
null);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
index 314162d3f0d..a599552fc11 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
@@ -144,8 +144,8 @@ public class HiveMetaStoreCache {
CacheFactory partitionValuesCacheFactory = new CacheFactory(
OptionalLong.of(partitionCacheTtlSecond >=
ExternalCatalog.CACHE_TTL_DISABLE_CACHE
- ? partitionCacheTtlSecond : 28800L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60L),
+ ? partitionCacheTtlSecond :
Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60L),
Config.max_hive_partition_table_cache_num,
true,
null);
@@ -153,7 +153,7 @@ public class HiveMetaStoreCache {
refreshExecutor);
CacheFactory partitionCacheFactory = new CacheFactory(
- OptionalLong.of(28800L),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
OptionalLong.empty(),
Config.max_hive_partition_cache_num,
true,
@@ -186,8 +186,8 @@ public class HiveMetaStoreCache {
CacheFactory fileCacheFactory = new CacheFactory(
OptionalLong.of(fileMetaCacheTtlSecond >=
ExternalCatalog.CACHE_TTL_DISABLE_CACHE
- ? fileMetaCacheTtlSecond : 28800L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60L),
+ ? fileMetaCacheTtlSecond :
Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60L),
Config.max_external_file_cache_num,
true,
null);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedFsViewProcessor.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedFsViewProcessor.java
index bbbe87cac87..9516f8a0c30 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedFsViewProcessor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedFsViewProcessor.java
@@ -41,8 +41,8 @@ public class HudiCachedFsViewProcessor {
public HudiCachedFsViewProcessor(ExecutorService executor) {
CacheFactory partitionCacheFactory = new CacheFactory(
- OptionalLong.of(28800L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60),
Config.max_external_table_cache_num,
true,
null);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedMetaClientProcessor.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedMetaClientProcessor.java
index 9ed1007e804..67bd6c72c81 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedMetaClientProcessor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedMetaClientProcessor.java
@@ -41,8 +41,8 @@ public class HudiCachedMetaClientProcessor {
public HudiCachedMetaClientProcessor(ExecutorService executor) {
CacheFactory partitionCacheFactory = new CacheFactory(
- OptionalLong.of(28800L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60),
Config.max_external_table_cache_num,
true,
null);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedPartitionProcessor.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedPartitionProcessor.java
index f302458f8ca..6ecc9e2efdd 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedPartitionProcessor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/HudiCachedPartitionProcessor.java
@@ -56,8 +56,8 @@ public class HudiCachedPartitionProcessor extends
HudiPartitionProcessor {
this.catalogId = catalogId;
this.executor = executor;
CacheFactory partitionCacheFactory = new CacheFactory(
- OptionalLong.of(28800L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60),
Config.max_external_table_cache_num,
true,
null);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataCache.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataCache.java
index f99b652b42d..e41fa620b9c 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataCache.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataCache.java
@@ -52,24 +52,24 @@ public class IcebergMetadataCache {
public IcebergMetadataCache(ExecutorService executor) {
CacheFactory snapshotListCacheFactory = new CacheFactory(
- OptionalLong.of(28800L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60),
Config.max_external_table_cache_num,
true,
null);
this.snapshotListCache = snapshotListCacheFactory.buildCache(key ->
loadSnapshots(key), null, executor);
CacheFactory tableCacheFactory = new CacheFactory(
- OptionalLong.of(28800L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60),
Config.max_external_table_cache_num,
true,
null);
this.tableCache = tableCacheFactory.buildCache(key -> loadTable(key),
null, executor);
CacheFactory snapshotCacheFactory = new CacheFactory(
- OptionalLong.of(28800L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60),
Config.max_external_table_cache_num,
true,
null);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeMetadataCache.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeMetadataCache.java
index 2213ded0bcb..f2a9b78fd9f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeMetadataCache.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/maxcompute/MaxComputeMetadataCache.java
@@ -33,7 +33,7 @@ public class MaxComputeMetadataCache {
public MaxComputeMetadataCache() {
partitionValuesCache =
Caffeine.newBuilder().maximumSize(Config.max_hive_partition_cache_num)
-
.expireAfterAccess(Config.external_cache_expire_time_minutes_after_access,
TimeUnit.MINUTES)
+ .expireAfterAccess(Config.external_cache_refresh_time_minutes,
TimeUnit.MINUTES)
.build();
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/metacache/MetaCache.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/metacache/MetaCache.java
index 51692b609a6..dc2670a83c6 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/metacache/MetaCache.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/metacache/MetaCache.java
@@ -45,7 +45,7 @@ public class MetaCache<T> {
public MetaCache(String name,
ExecutorService executor,
- OptionalLong expireAfterWriteSec,
+ OptionalLong expireAfterAccessSec,
OptionalLong refreshAfterWriteSec,
long maxSize,
CacheLoader<String, List<Pair<String, String>>> namesCacheLoader,
@@ -60,13 +60,13 @@ public class MetaCache<T> {
// from remote datasource, it is just a local generated object to
represent the meta info.
// So it only need to be expired after specified duration.
CacheFactory namesCacheFactory = new CacheFactory(
- expireAfterWriteSec,
+ expireAfterAccessSec,
refreshAfterWriteSec,
1, // names cache has one and only one entry
true,
null);
CacheFactory objCacheFactory = new CacheFactory(
- expireAfterWriteSec,
+ expireAfterAccessSec,
OptionalLong.empty(),
maxSize,
true,
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonMetadataCache.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonMetadataCache.java
index d5b49aa82d3..b16715e8238 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonMetadataCache.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/PaimonMetadataCache.java
@@ -48,8 +48,8 @@ public class PaimonMetadataCache {
public PaimonMetadataCache(ExecutorService executor) {
CacheFactory snapshotCacheFactory = new CacheFactory(
- OptionalLong.of(28800L),
-
OptionalLong.of(Config.external_cache_expire_time_minutes_after_access * 60),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
+ OptionalLong.of(Config.external_cache_refresh_time_minutes *
60),
Config.max_external_table_cache_num,
true,
null);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/fs/FileSystemCache.java
b/fe/fe-core/src/main/java/org/apache/doris/fs/FileSystemCache.java
index e96258dc719..a6f54df22ef 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/fs/FileSystemCache.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/fs/FileSystemCache.java
@@ -37,7 +37,7 @@ public class FileSystemCache {
public FileSystemCache() {
// no need to set refreshAfterWrite, because the FileSystem is created
once and never changed
CacheFactory fsCacheFactory = new CacheFactory(
- OptionalLong.of(86400L),
+
OptionalLong.of(Config.external_cache_expire_time_seconds_after_access),
OptionalLong.empty(),
Config.max_remote_file_system_cache_num,
false,
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/common/CacheFactoryTest.java
b/fe/fe-core/src/test/java/org/apache/doris/common/CacheFactoryTest.java
index 44ca185d611..98b8517692a 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/common/CacheFactoryTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/common/CacheFactoryTest.java
@@ -149,7 +149,7 @@ public class CacheFactoryTest {
FakeTicker ticker = new FakeTicker();
AtomicLong counter = new AtomicLong(0);
CacheFactory cacheFactory = new CacheFactory(
- OptionalLong.of(60L),
+ OptionalLong.of(20L),
OptionalLong.of(10),
1000,
false,
@@ -174,8 +174,8 @@ public class CacheFactoryTest {
Assertions.assertEquals("value1", value.getValue());
// refreshed, so counter +1
Assertions.assertEquals(2, counter.get());
- // advance 61 seconds to pass the expireAfterWrite
- ticker.advance(61, TimeUnit.SECONDS);
+ // advance 21 seconds to pass the expireAfterAccess
+ ticker.advance(21, TimeUnit.SECONDS);
value = loadingCache.get(1);
Assertions.assertEquals("value1", value.getValue());
// expired, so counter +1
@@ -187,7 +187,7 @@ public class CacheFactoryTest {
FakeTicker ticker = new FakeTicker();
AtomicLong counter = new AtomicLong(0);
CacheFactory cacheFactory = new CacheFactory(
- OptionalLong.of(60L),
+ OptionalLong.of(6L),
OptionalLong.empty(),
1000,
false,
@@ -197,13 +197,13 @@ public class CacheFactoryTest {
CacheValue value = loadingCache.get(1);
Assertions.assertEquals("value1", value.getValue());
Assertions.assertEquals(1, counter.get());
- // advance 30 seconds, key still not expired
- ticker.advance(30, TimeUnit.SECONDS);
+ // advance 1 seconds, key still not expired
+ ticker.advance(1, TimeUnit.SECONDS);
value = loadingCache.get(1);
Assertions.assertEquals("value1", value.getValue());
Assertions.assertEquals(1, counter.get());
- // advance 31 seconds to pass the expireAfterWrite
- ticker.advance(31, TimeUnit.SECONDS);
+ // advance 7 seconds to pass the expireAfterAccess
+ ticker.advance(7, TimeUnit.SECONDS);
value = loadingCache.get(1);
Assertions.assertEquals("value1", value.getValue());
// expired, so counter +1
@@ -243,7 +243,7 @@ public class CacheFactoryTest {
Assertions.assertEquals("value1", futureValue.get().get().getValue());
// refreshed, so counter +1
Assertions.assertEquals(2, counter.get());
- // advance 61 seconds to pass the expireAfterWrite
+ // advance 61 seconds to pass the expireAfterAccess
ticker.advance(61, TimeUnit.SECONDS);
futureValue = loadingCache.get(1);
Assertions.assertFalse(futureValue.isDone());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]