From 5faf6a1df9348b8cca2f6261047cd095f49f9ec4 Mon Sep 17 00:00:00 2001 From: Le Thanh Date: Mon, 25 Nov 2024 13:13:21 +0700 Subject: [PATCH 1/3] Exception on RedissonLocalCachedMap.putAll Signed-off-by: Le Thanh --- .../src/main/java/org/redisson/RedissonLocalCachedMap.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java index 8c4819a73..722fdbc60 100644 --- a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java +++ b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java @@ -727,7 +727,7 @@ public class RedissonLocalCachedMap extends RedissonMap implements R params.add(map.size()*2); byte[][] hashes = new byte[map.size()][]; int i = 0; - + Map clonedMap = new HashMap<>(); for (java.util.Map.Entry t : map.entrySet()) { ByteBuf mapKey = encodeMapKey(t.getKey()); ByteBuf mapValue = encodeMapValue(t.getValue()); @@ -736,6 +736,7 @@ public class RedissonLocalCachedMap extends RedissonMap implements R CacheKey cacheKey = localCacheView.toCacheKey(mapKey); hashes[i] = cacheKey.getKeyHash(); i++; + clonedMap.put(t.getKey(), t.getValue()); } ByteBuf msgEncoded = null; @@ -783,7 +784,7 @@ public class RedissonLocalCachedMap extends RedissonMap implements R params.toArray()); CompletionStage f = future.thenApply(res -> { - cacheMap(map); + cacheMap(clonedMap); return null; }); return new CompletableFutureWrapper<>(f); From 585c24e58ac4faac175ffeb60030aa25be5d9059 Mon Sep 17 00:00:00 2001 From: Le Thanh Date: Mon, 25 Nov 2024 15:49:43 +0700 Subject: [PATCH 2/3] Exception on RedissonLocalCachedMap.putAll - Add test Signed-off-by: Le Thanh --- .../org/redisson/RedissonLocalCachedMapTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/redisson/src/test/java/org/redisson/RedissonLocalCachedMapTest.java b/redisson/src/test/java/org/redisson/RedissonLocalCachedMapTest.java index 68c301cae..3d9a19874 100644 --- a/redisson/src/test/java/org/redisson/RedissonLocalCachedMapTest.java +++ b/redisson/src/test/java/org/redisson/RedissonLocalCachedMapTest.java @@ -878,6 +878,18 @@ public class RedissonLocalCachedMapTest extends BaseMapTest { assertThat(cache1.size()).isEqualTo(3); } + @Test + public void testPutAllRMap() { + RLocalCachedMap map = redisson.getLocalCachedMap(LocalCachedMapOptions.name("test")); + RLocalCachedMap map1 = redisson.getLocalCachedMap(LocalCachedMapOptions.name("test01")); + map.put(1, "1"); + map.put(2, "2"); + map.put(3, "3"); + map1.putAll(map); + assertThat(map).hasSize(3); + assertThat(map1).hasSize(3); + } + @Test public void testGetBeforePut() { RLocalCachedMap map1 = redisson.getLocalCachedMap(LocalCachedMapOptions.name("test")); From 3231852f81475b9c2c733f1ed7ee220681417686 Mon Sep 17 00:00:00 2001 From: Le Thanh Date: Tue, 26 Nov 2024 10:13:30 +0700 Subject: [PATCH 3/3] Exception on RedissonLocalCachedMap.putAll - Change put local logic Signed-off-by: Le Thanh --- .../java/org/redisson/RedissonLocalCachedMap.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java index 722fdbc60..884aea748 100644 --- a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java +++ b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java @@ -727,16 +727,16 @@ public class RedissonLocalCachedMap extends RedissonMap implements R params.add(map.size()*2); byte[][] hashes = new byte[map.size()][]; int i = 0; - Map clonedMap = new HashMap<>(); + for (java.util.Map.Entry t : map.entrySet()) { ByteBuf mapKey = encodeMapKey(t.getKey()); ByteBuf mapValue = encodeMapValue(t.getValue()); params.add(mapKey); params.add(mapValue); CacheKey cacheKey = localCacheView.toCacheKey(mapKey); + cachePut(cacheKey, t.getKey(), t.getValue()); hashes[i] = cacheKey.getKeyHash(); i++; - clonedMap.put(t.getKey(), t.getValue()); } ByteBuf msgEncoded = null; @@ -782,12 +782,7 @@ public class RedissonLocalCachedMap extends RedissonMap implements R + "end;", Arrays.asList(getRawName(), listener.getInvalidationTopicName(), listener.getUpdatesLogName()), params.toArray()); - - CompletionStage f = future.thenApply(res -> { - cacheMap(clonedMap); - return null; - }); - return new CompletableFutureWrapper<>(f); + return new CompletableFutureWrapper<>(future); } @Override