diff --git a/commons/src/main/java/org/restheart/cache/impl/CaffeineCache.java b/commons/src/main/java/org/restheart/cache/impl/CaffeineCache.java index 1c386a427..6d5c69cce 100644 --- a/commons/src/main/java/org/restheart/cache/impl/CaffeineCache.java +++ b/commons/src/main/java/org/restheart/cache/impl/CaffeineCache.java @@ -22,11 +22,13 @@ import java.util.AbstractMap; import java.util.Map; import java.util.Optional; +import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; +import org.restheart.utils.ThreadsUtils; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; @@ -39,10 +41,11 @@ * @param the class of the values (is Optional-ized). */ public class CaffeineCache implements org.restheart.cache.Cache { + private static final Executor virtualThreadsExecutor = ThreadsUtils.virtualThreadsExecutor(); private final Cache> wrapped; public CaffeineCache(long size, EXPIRE_POLICY expirePolicy, long ttl) { - var builder = Caffeine.newBuilder(); + var builder = Caffeine.newBuilder().executor(virtualThreadsExecutor); builder.maximumSize(size); @@ -56,7 +59,7 @@ public CaffeineCache(long size, EXPIRE_POLICY expirePolicy, long ttl) { } public CaffeineCache(long size, EXPIRE_POLICY expirePolicy, long ttl, Consumer>> remover) { - var builder = Caffeine.newBuilder(); + var builder = Caffeine.newBuilder().executor(virtualThreadsExecutor); builder.maximumSize(size); diff --git a/commons/src/main/java/org/restheart/cache/impl/CaffeineLoadingCache.java b/commons/src/main/java/org/restheart/cache/impl/CaffeineLoadingCache.java index 8a80a7f94..40d0aa79e 100644 --- a/commons/src/main/java/org/restheart/cache/impl/CaffeineLoadingCache.java +++ b/commons/src/main/java/org/restheart/cache/impl/CaffeineLoadingCache.java @@ -42,7 +42,7 @@ * @param the class of the values (is Optional-ized). */ public class CaffeineLoadingCache implements org.restheart.cache.LoadingCache { - private static final Executor threadPerTaskExecutor = ThreadsUtils.virtualThreadsExecutor(); + private static final Executor virtualThreadsExecutor = ThreadsUtils.virtualThreadsExecutor(); private final AsyncLoadingCache> wrapped; public CaffeineLoadingCache(long size, EXPIRE_POLICY expirePolicy, long ttl, Function loader) { @@ -57,11 +57,11 @@ public CaffeineLoadingCache(long size, EXPIRE_POLICY expirePolicy, long ttl, Fun } wrapped = builder - .executor(threadPerTaskExecutor) + .executor(virtualThreadsExecutor) .buildAsync(new AsyncCacheLoader>() { @Override public CompletableFuture> asyncLoad(K key, Executor executor) throws Exception { - return CompletableFuture.supplyAsync(() -> Optional.ofNullable(loader.apply(key))); + return CompletableFuture.supplyAsync(() -> Optional.ofNullable(loader.apply(key)), virtualThreadsExecutor); } @Override @@ -71,7 +71,7 @@ public CompletableFuture> asyncLoad(K key, Executor execut ret.put(key, Optional.ofNullable(loader.apply(key))); }); - return CompletableFuture.supplyAsync(() -> ret); + return CompletableFuture.supplyAsync(() -> ret, virtualThreadsExecutor); } }); }