From 15768c412c127f9f6b57850802762a68ebaddf6c Mon Sep 17 00:00:00 2001 From: Penghui Li Date: Wed, 30 Aug 2023 21:33:15 +0800 Subject: [PATCH] [fix][broker] Use expireAfterAccess instead of expireAfterWrite for metadata cache --- .../apache/pulsar/metadata/api/MetadataCacheConfig.java | 9 ++++++++- .../pulsar/metadata/cache/impl/MetadataCacheImpl.java | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/api/MetadataCacheConfig.java b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/api/MetadataCacheConfig.java index 55b159071fda4..a42c90e2ee7e0 100644 --- a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/api/MetadataCacheConfig.java +++ b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/api/MetadataCacheConfig.java @@ -46,5 +46,12 @@ public class MetadataCacheConfig { * A negative or zero value disables automatic expiration. */ @Builder.Default - private final long expireAfterWriteMillis = 2 * DEFAULT_CACHE_REFRESH_TIME_MILLIS; + private final long expireAfterWriteMillis = 0L; + + /** + * Specifies that each entry should be automatically removed from the cache once a fixed duration + * has elapsed after the entry's creation, the most recent replacement of its value, or its last access. + * A negative or zero value disables automatic expiration. + */ + private final long expireAfterAccessMillis = 2 * DEFAULT_CACHE_REFRESH_TIME_MILLIS; } diff --git a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/cache/impl/MetadataCacheImpl.java b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/cache/impl/MetadataCacheImpl.java index b9051a7dc7df4..b626813b1bbcd 100644 --- a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/cache/impl/MetadataCacheImpl.java +++ b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/cache/impl/MetadataCacheImpl.java @@ -76,6 +76,9 @@ public MetadataCacheImpl(MetadataStore store, MetadataSerde serde, MetadataCa if (cacheConfig.getExpireAfterWriteMillis() > 0) { cacheBuilder.expireAfterWrite(cacheConfig.getExpireAfterWriteMillis(), TimeUnit.MILLISECONDS); } + if (cacheConfig.getExpireAfterAccessMillis() > 0) { + cacheBuilder.expireAfterAccess(cacheConfig.getExpireAfterAccessMillis(), TimeUnit.MILLISECONDS); + } this.objCache = cacheBuilder .buildAsync(new AsyncCacheLoader>>() { @Override