From 14abe1e5ec47397fe928eb3e1dcd0717c72d1025 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Wed, 6 Apr 2022 16:55:23 +0300 Subject: [PATCH] Fixed - RLocalCachedMap.getAll() method doesn't respect storeCacheMiss setting #4218 --- .../java/org/redisson/RedissonLocalCachedMap.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java index 1fad774df..a61666a46 100644 --- a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java +++ b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java @@ -599,6 +599,7 @@ public class RedissonLocalCachedMap extends RedissonMap implements R Map result = new HashMap(); Set mapKeys = new HashSet(keys); + Set missedKeys = new HashSet<>(); for (Iterator iterator = mapKeys.iterator(); iterator.hasNext();) { K key = iterator.next(); CacheKey cacheKey = localCacheView.toCacheKey(key); @@ -608,6 +609,8 @@ public class RedissonLocalCachedMap extends RedissonMap implements R result.put(key, (V) value.getValue()); } iterator.remove(); + } else { + missedKeys.add(key); } } @@ -616,24 +619,21 @@ public class RedissonLocalCachedMap extends RedissonMap implements R return new CompletableFutureWrapper<>(result); } - Set newKeys = new HashSet<>(keys); - newKeys.removeAll(result.keySet()); - - if (!newKeys.isEmpty()) { - CompletionStage> f = loadAllAsync(newKeys, false, 1, result) + if (!missedKeys.isEmpty()) { + CompletionStage> f = loadAllAsync(missedKeys, false, 1, result) .thenApply(r -> result); return new CompletableFutureWrapper<>(f); } return new CompletableFutureWrapper<>(result); } - RFuture> future = super.getAllAsync(mapKeys); + RFuture> future = super.getAllAsync(missedKeys); CompletionStage> f = future.thenApply(map -> { result.putAll(map); cacheMap(map); if (storeCacheMiss) { - mapKeys.stream() + missedKeys.stream() .filter(key -> !map.containsKey(key)) .forEach(key -> { CacheKey cacheKey = localCacheView.toCacheKey(key);