From 6c8f04b0f101acd4940155270758ed41f9ca4645 Mon Sep 17 00:00:00 2001 From: Nikita Date: Tue, 12 Jun 2018 14:37:07 +0300 Subject: [PATCH] Fixed - ConcurrentModificationException in RTransaction object. #1459 --- .../java/org/redisson/cache/LocalCachedMapDisabledKey.java | 4 +++- .../main/java/org/redisson/cache/LocalCachedMapEnable.java | 4 +++- .../java/org/redisson/transaction/RedissonTransaction.java | 4 +++- .../transaction/RedissonBaseTransactionalMapTest.java | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/redisson/src/main/java/org/redisson/cache/LocalCachedMapDisabledKey.java b/redisson/src/main/java/org/redisson/cache/LocalCachedMapDisabledKey.java index 0abb1df9a..b3e5cf673 100644 --- a/redisson/src/main/java/org/redisson/cache/LocalCachedMapDisabledKey.java +++ b/redisson/src/main/java/org/redisson/cache/LocalCachedMapDisabledKey.java @@ -15,12 +15,14 @@ */ package org.redisson.cache; +import java.io.Serializable; + /** * * @author Nikita Koksharov * */ -public class LocalCachedMapDisabledKey { +public class LocalCachedMapDisabledKey implements Serializable { private String requestId; private long timeout; diff --git a/redisson/src/main/java/org/redisson/cache/LocalCachedMapEnable.java b/redisson/src/main/java/org/redisson/cache/LocalCachedMapEnable.java index b2bcbbdd9..031440968 100644 --- a/redisson/src/main/java/org/redisson/cache/LocalCachedMapEnable.java +++ b/redisson/src/main/java/org/redisson/cache/LocalCachedMapEnable.java @@ -15,12 +15,14 @@ */ package org.redisson.cache; +import java.io.Serializable; + /** * * @author Nikita Koksharov * */ -public class LocalCachedMapEnable { +public class LocalCachedMapEnable implements Serializable { private byte[][] keyHashes; private String requestId; diff --git a/redisson/src/main/java/org/redisson/transaction/RedissonTransaction.java b/redisson/src/main/java/org/redisson/transaction/RedissonTransaction.java index d7858b658..700e071df 100644 --- a/redisson/src/main/java/org/redisson/transaction/RedissonTransaction.java +++ b/redisson/src/main/java/org/redisson/transaction/RedissonTransaction.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -79,7 +80,7 @@ public class RedissonTransaction implements RTransaction { private final AtomicBoolean executed = new AtomicBoolean(); private final TransactionOptions options; - private List operations = new ArrayList(); + private List operations = new CopyOnWriteArrayList(); private Set localCaches = new HashSet(); private final long startTime = System.currentTimeMillis(); @@ -287,6 +288,7 @@ public class RedissonTransaction implements RTransaction { private void checkTimeout() { if (options.getTimeout() != -1 && System.currentTimeMillis() - startTime > options.getTimeout()) { + rollbackAsync(); throw new TransactionTimeoutException("Transaction was discarded due to timeout " + options.getTimeout() + " milliseconds"); } } diff --git a/redisson/src/test/java/org/redisson/transaction/RedissonBaseTransactionalMapTest.java b/redisson/src/test/java/org/redisson/transaction/RedissonBaseTransactionalMapTest.java index e3f71c352..65fe32140 100644 --- a/redisson/src/test/java/org/redisson/transaction/RedissonBaseTransactionalMapTest.java +++ b/redisson/src/test/java/org/redisson/transaction/RedissonBaseTransactionalMapTest.java @@ -22,7 +22,7 @@ public abstract class RedissonBaseTransactionalMapTest extends BaseTest { @Test public void testFastPut() throws InterruptedException { - ExecutorService executor = Executors.newFixedThreadPool(200); + ExecutorService executor = Executors.newFixedThreadPool(2000); for (int i = 0; i < 2000; i++) { executor.submit(() -> { for (int j = 0; j < 100; j++) {