From 2666ed255a5ac2bb3f1358b4a5d5a1b16b8bb2d1 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Thu, 29 Jun 2023 08:47:11 +0300 Subject: [PATCH] Fixed - transactional RMap.fastRemove() method throws UnsupportedOperationException. #5131 --- .../org/redisson/transaction/BaseTransactionalMap.java | 2 +- .../transaction/RedissonBaseTransactionalMapTest.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/transaction/BaseTransactionalMap.java b/redisson/src/main/java/org/redisson/transaction/BaseTransactionalMap.java index 218610d5a..328f614b7 100644 --- a/redisson/src/main/java/org/redisson/transaction/BaseTransactionalMap.java +++ b/redisson/src/main/java/org/redisson/transaction/BaseTransactionalMap.java @@ -469,7 +469,7 @@ public class BaseTransactionalMap extends BaseTransactionalObject { List locks = Arrays.stream(keys).map(k -> getLock(k)).collect(Collectors.toList()); return executeLocked(timeout, () -> { AtomicLong counter = new AtomicLong(); - List keyList = Arrays.asList(keys); + List keyList = new ArrayList<>(Arrays.asList(keys)); for (Iterator iterator = keyList.iterator(); iterator.hasNext();) { K key = iterator.next(); HashValue keyHash = toKeyHash(key); diff --git a/redisson/src/test/java/org/redisson/transaction/RedissonBaseTransactionalMapTest.java b/redisson/src/test/java/org/redisson/transaction/RedissonBaseTransactionalMapTest.java index 4e8af5c31..a92277902 100644 --- a/redisson/src/test/java/org/redisson/transaction/RedissonBaseTransactionalMapTest.java +++ b/redisson/src/test/java/org/redisson/transaction/RedissonBaseTransactionalMapTest.java @@ -216,6 +216,15 @@ public abstract class RedissonBaseTransactionalMapTest extends BaseTest { assertThat(m.get("5")).isEqualTo("8"); } + @Test + public void testFastRemove() { + RTransaction transaction = redisson.createTransaction(TransactionOptions.defaults()); + RMap map = getTransactionalMap(transaction); + assertThat(map.fastPut("1", "2")).isTrue(); + assertThat(map.fastRemove("1")).isEqualTo(1); + transaction.commit(); + assertThat(redisson.getKeys().count()).isZero(); + } @Test public void testRemove() {