diff --git a/redisson/src/main/java/org/redisson/RedissonExecutorService.java b/redisson/src/main/java/org/redisson/RedissonExecutorService.java index 6da329fc3..d107f4bbe 100644 --- a/redisson/src/main/java/org/redisson/RedissonExecutorService.java +++ b/redisson/src/main/java/org/redisson/RedissonExecutorService.java @@ -422,6 +422,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); } 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/main/java/org/redisson/api/RLiveObjectService.java b/redisson/src/main/java/org/redisson/api/RLiveObjectService.java index 9f41edb62..c263a80fa 100644 --- a/redisson/src/main/java/org/redisson/api/RLiveObjectService.java +++ b/redisson/src/main/java/org/redisson/api/RLiveObjectService.java @@ -198,7 +198,7 @@ public interface RLiveObjectService { * * @param Entity type * @param attachedObject - proxied object - * @return proxied object + * @return detachedObject object - not proxied object */ T detach(T attachedObject); 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() {