From a3e8cc95a6aee1e340b5c23edc191766358cc3fc Mon Sep 17 00:00:00 2001 From: Nikita Date: Tue, 13 Feb 2018 06:16:51 +0300 Subject: [PATCH] Fixed - RBatch throws NPE with big pipeline in atomic mode. #1294 --- .../client/protocol/BatchCommandData.java | 3 ++- .../java/org/redisson/RedissonBatchTest.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/client/protocol/BatchCommandData.java b/redisson/src/main/java/org/redisson/client/protocol/BatchCommandData.java index 2e59fbaad..e1e23a0bf 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/BatchCommandData.java +++ b/redisson/src/main/java/org/redisson/client/protocol/BatchCommandData.java @@ -19,6 +19,7 @@ import java.util.concurrent.atomic.AtomicReference; import org.redisson.client.RedisRedirectException; import org.redisson.client.codec.Codec; +import org.redisson.client.codec.StringCodec; import org.redisson.misc.RPromise; import org.redisson.misc.RedissonPromise; @@ -35,7 +36,7 @@ public class BatchCommandData extends CommandData implements Compara private final AtomicReference redirectError = new AtomicReference(); public BatchCommandData(RedisCommand command, Object[] params, int index) { - this(new RedissonPromise(), null, command, params, index); + this(new RedissonPromise(), StringCodec.INSTANCE, command, params, index); } public BatchCommandData(RPromise promise, Codec codec, RedisCommand command, Object[] params, int index) { diff --git a/redisson/src/test/java/org/redisson/RedissonBatchTest.java b/redisson/src/test/java/org/redisson/RedissonBatchTest.java index aaa3a20be..c94b563e8 100644 --- a/redisson/src/test/java/org/redisson/RedissonBatchTest.java +++ b/redisson/src/test/java/org/redisson/RedissonBatchTest.java @@ -49,6 +49,22 @@ public class RedissonBatchTest extends BaseTest { List t = batch.execute(); System.out.println(t); } + + @Test + public void testBigRequestAtomic() { + RBatch batch = redisson.createBatch(); + batch.atomic(); + batch.timeout(15, TimeUnit.SECONDS); + batch.retryInterval(1, TimeUnit.SECONDS); + batch.retryAttempts(5); + for (int i = 0; i < 100; i++) { + batch.getBucket("" + i).setAsync(i); + batch.getBucket("" + i).getAsync(); + } + + BatchResult s = batch.execute(); + assertThat(s.getResponses().size()).isEqualTo(200); + } @Test public void testSyncSlaves() throws FailedToStartRedisException, IOException, InterruptedException {