From 3eeab0a7fb09ec5580f709bbc683d91dda1f75b5 Mon Sep 17 00:00:00 2001 From: Sreesh Maheshwar Date: Mon, 10 Mar 2025 13:31:43 +0000 Subject: [PATCH 1/2] Use Caffeine's `Expiry.writing` for `StorageCredentialCache` --- .../storage/cache/StorageCredentialCache.java | 45 +++++-------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java b/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java index e92053852..ad3c02fba 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java @@ -22,10 +22,10 @@ import com.github.benmanes.caffeine.cache.Expiry; import com.github.benmanes.caffeine.cache.LoadingCache; import jakarta.annotation.Nonnull; +import java.time.Duration; import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.concurrent.TimeUnit; import java.util.function.Function; import org.apache.iceberg.exceptions.UnprocessableEntityException; import org.apache.polaris.core.PolarisCallContext; @@ -51,39 +51,16 @@ public StorageCredentialCache() { Caffeine.newBuilder() .maximumSize(CACHE_MAX_NUMBER_OF_ENTRIES) .expireAfter( - new Expiry() { - @Override - public long expireAfterCreate( - StorageCredentialCacheKey key, - StorageCredentialCacheEntry entry, - long currentTime) { - long expireAfterMillis = - Math.max( - 0, - Math.min( - (entry.getExpirationTime() - System.currentTimeMillis()) / 2, - maxCacheDurationMs())); - return TimeUnit.MILLISECONDS.toNanos(expireAfterMillis); - } - - @Override - public long expireAfterUpdate( - StorageCredentialCacheKey key, - StorageCredentialCacheEntry entry, - long currentTime, - long currentDuration) { - return currentDuration; - } - - @Override - public long expireAfterRead( - StorageCredentialCacheKey key, - StorageCredentialCacheEntry entry, - long currentTime, - long currentDuration) { - return currentDuration; - } - }) + Expiry.writing( + (StorageCredentialCacheKey key, StorageCredentialCacheEntry entry) -> { + long expireAfterMillis = + Math.max( + 0, + Math.min( + (entry.getExpirationTime() - System.currentTimeMillis()) / 2, + maxCacheDurationMs())); + return Duration.ofMillis(expireAfterMillis); + })) .build( key -> { // the load happen at getOrGenerateSubScopeCreds() From fc6e762fb22a9f90271212223732bfd5c1c8a79e Mon Sep 17 00:00:00 2001 From: Sreesh Maheshwar Date: Wed, 12 Mar 2025 09:44:42 +0000 Subject: [PATCH 2/2] Change to `Expire.creating` --- .../polaris/core/storage/cache/StorageCredentialCache.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java b/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java index ad3c02fba..57b9f9ec8 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java @@ -51,7 +51,7 @@ public StorageCredentialCache() { Caffeine.newBuilder() .maximumSize(CACHE_MAX_NUMBER_OF_ENTRIES) .expireAfter( - Expiry.writing( + Expiry.creating( (StorageCredentialCacheKey key, StorageCredentialCacheEntry entry) -> { long expireAfterMillis = Math.max(