From a0b6dd5395e917b4fa02357efb34ee95ab714d56 Mon Sep 17 00:00:00 2001 From: Radu Grigore Date: Sun, 11 Oct 2020 09:35:20 +0100 Subject: [PATCH 1/3] Fix in RedissonExecutorService When wrapping an OutputStream around a ByteArrayOutputStream, it is safer to flush. See, for example, https://stackoverflow.com/questions/2984538/how-to-use-bytearrayoutputstream-and-dataoutputstream-simultaneously-java --- .../src/main/java/org/redisson/RedissonExecutorService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/redisson/src/main/java/org/redisson/RedissonExecutorService.java b/redisson/src/main/java/org/redisson/RedissonExecutorService.java index f8834d850..30a3c4630 100644 --- a/redisson/src/main/java/org/redisson/RedissonExecutorService.java +++ b/redisson/src/main/java/org/redisson/RedissonExecutorService.java @@ -429,6 +429,8 @@ public class RedissonExecutorService implements RScheduledExecutorService { try { ObjectOutput oo = new ObjectOutputStream(os); oo.writeObject(task); + oo.flush(); + oo.close(); } catch (Exception e) { throw new IllegalArgumentException("Unable to serialize lambda", e); } From 681d11ca75760c05f9ad8e90f775949f00169b15 Mon Sep 17 00:00:00 2001 From: whosoonhwang Date: Mon, 6 Jun 2022 15:35:38 +0900 Subject: [PATCH 2/3] Fix - the description of the return for the RLiveObjectService interface Signed-off-by: whosoonhwang --- redisson/src/main/java/org/redisson/api/RLiveObjectService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/api/RLiveObjectService.java b/redisson/src/main/java/org/redisson/api/RLiveObjectService.java index f742ea13c..d7b74eca8 100644 --- a/redisson/src/main/java/org/redisson/api/RLiveObjectService.java +++ b/redisson/src/main/java/org/redisson/api/RLiveObjectService.java @@ -190,7 +190,7 @@ public interface RLiveObjectService { * * @param Entity type * @param attachedObject - proxied object - * @return proxied object + * @return detachedObject object - not proxied object */ T detach(T attachedObject); From 24e1c108445832f63f01860fe1a01c918cc25beb Mon Sep 17 00:00:00 2001 From: seakider Date: Mon, 12 Aug 2024 23:01:35 +0800 Subject: [PATCH 3/3] Fixed - caused RedisException when execute lua-script Signed-off-by: seakider --- .../java/org/redisson/RedissonSubList.java | 14 +++---- .../java/org/redisson/RedissonListTest.java | 37 ++++++++++++++++++- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonSubList.java b/redisson/src/main/java/org/redisson/RedissonSubList.java index 7eeb8d550..66b11dfb2 100644 --- a/redisson/src/main/java/org/redisson/RedissonSubList.java +++ b/redisson/src/main/java/org/redisson/RedissonSubList.java @@ -164,13 +164,13 @@ public class RedissonSubList extends RedissonList implements RList { "local v = 0; " + "local fromIndex = table.remove(ARGV, 1);" + "local toIndex = table.remove(ARGV, 1);" + - "local count = table.remove(ARGV, 3);" + + "local count = table.remove(ARGV, 1);" + "local items = redis.call('lrange', KEYS[1], fromIndex, toIndex); " + "for i=1, #items do " + "for j = 1, #ARGV, 1 do " + "if items[i] == ARGV[j] then " + - "redis.call('lrem', KEYS[1], count, ARGV[i]); " + + "redis.call('lrem', KEYS[1], count, ARGV[j]); " + "v = 1; " + "end; " + "end; " + @@ -329,13 +329,13 @@ public class RedissonSubList extends RedissonList implements RList { public RFuture lastIndexOfAsync(Object o) { return commandExecutor.evalReadAsync(getRawName(), codec, RedisCommands.EVAL_INTEGER, "local key = KEYS[1] " + - "local obj = ARGV[1] " + + "local obj = table.remove(ARGV, 1);" + "local fromIndex = table.remove(ARGV, 1);" + - "local toIndex = table.remove(ARGV, 2);" + - "local items = redis.call('lrange', key, tonumber(fromIndex), tonumber(toIndexs)) " + - "for i = #items, 0, -1 do " + + "local toIndex = table.remove(ARGV, 1);" + + "local items = redis.call('lrange', key, fromIndex, toIndex) " + + "for i = #items, 1, -1 do " + "if items[i] == obj then " + - "return tonumber(ARGV[2]) + i - 1 " + + "return tonumber(fromIndex) + i - 1; " + "end; " + "end; " + "return -1; ", diff --git a/redisson/src/test/java/org/redisson/RedissonListTest.java b/redisson/src/test/java/org/redisson/RedissonListTest.java index 72cb61e1e..897a3a1e8 100644 --- a/redisson/src/test/java/org/redisson/RedissonListTest.java +++ b/redisson/src/test/java/org/redisson/RedissonListTest.java @@ -959,7 +959,42 @@ public class RedissonListTest extends RedisDockerTest { assertThat(val1).isEqualTo(6); assertThat(subList.iterator()).toIterable().containsExactly(3, 4); } - + + @Test + public void testSubListRemoveAll() { + List list = redisson.getList("list"); + list.add(1); + list.add(2); + list.add(3); + list.add(4); + list.add(5); + list.add(6); + list.add(7); + list.add(8); + + List subList = list.subList(2, 6); + assertThat(subList.iterator()).toIterable().containsExactly(3, 4, 5, 6); + assertThat(subList.removeAll(List.of(3, 5))).isTrue(); + assertThat(subList.iterator()).toIterable().containsExactly(4, 6, 7, 8); + } + + @Test + public void testSubListLastIndexOf() { + List list = redisson.getList("list"); + list.add(1); + list.add(2); + list.add(3); + list.add(4); + list.add(5); + list.add(5); + list.add(6); + list.add(7); + + List subList = list.subList(2, 6); + assertThat(subList.lastIndexOf(3)).isEqualTo(2); + assertThat(subList.lastIndexOf(4)).isEqualTo(3); + assertThat(subList.lastIndexOf(5)).isEqualTo(5); + } @Test public void testSet() {