From a68a8f1b905e8d28a393e900d9545f50c365f4d2 Mon Sep 17 00:00:00 2001 From: sazzad16 Date: Mon, 22 Jul 2019 11:33:48 +0600 Subject: [PATCH 1/2] Add missing UNWATCH in Transaction and Pipeline --- src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java | 6 ++++++ .../clients/jedis/commands/MultiKeyBinaryRedisPipeline.java | 2 ++ .../clients/jedis/commands/MultiKeyCommandsPipeline.java | 2 ++ 3 files changed, 10 insertions(+) diff --git a/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java b/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java index 6c6c1e6cdf..c0bc5bc12b 100644 --- a/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java +++ b/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java @@ -307,6 +307,12 @@ public Response watch(byte[]... keys) { return getResponse(BuilderFactory.STRING); } + @Override + public Response unwatch() { + client.unwatch(); + return getResponse(BuilderFactory.STRING); + } + @Override public Response zinterstore(String dstkey, String... sets) { client.zinterstore(dstkey, sets); diff --git a/src/main/java/redis/clients/jedis/commands/MultiKeyBinaryRedisPipeline.java b/src/main/java/redis/clients/jedis/commands/MultiKeyBinaryRedisPipeline.java index 7a823be628..981e8d27f1 100644 --- a/src/main/java/redis/clients/jedis/commands/MultiKeyBinaryRedisPipeline.java +++ b/src/main/java/redis/clients/jedis/commands/MultiKeyBinaryRedisPipeline.java @@ -58,6 +58,8 @@ public interface MultiKeyBinaryRedisPipeline { Response watch(byte[]... keys); + Response unwatch(); + Response zinterstore(byte[] dstkey, byte[]... sets); Response zinterstore(byte[] dstkey, ZParams params, byte[]... sets); diff --git a/src/main/java/redis/clients/jedis/commands/MultiKeyCommandsPipeline.java b/src/main/java/redis/clients/jedis/commands/MultiKeyCommandsPipeline.java index b70ecb298a..b2f22d35f1 100644 --- a/src/main/java/redis/clients/jedis/commands/MultiKeyCommandsPipeline.java +++ b/src/main/java/redis/clients/jedis/commands/MultiKeyCommandsPipeline.java @@ -57,6 +57,8 @@ public interface MultiKeyCommandsPipeline { Response watch(String... keys); + Response unwatch(); + Response zinterstore(String dstkey, String... sets); Response zinterstore(String dstkey, ZParams params, String... sets); From 251b532cd7c5134b3fb0a30826246a3bd625eb38 Mon Sep 17 00:00:00 2001 From: sazzad16 Date: Tue, 23 Jul 2019 11:57:27 +0600 Subject: [PATCH 2/2] test for UNWATCH in pipeline --- .../clients/jedis/tests/PipeliningTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java index 9e7a4baf73..6e7388745e 100644 --- a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java +++ b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java @@ -308,6 +308,24 @@ public void multiWithSync() { assertEquals("world", r3.get()); } + @Test + public void multiWithWatch() { + String key = "foo"; + String val = "bar"; + List expect = new ArrayList<>(); + List expMulti = new ArrayList<>(); + + Pipeline pipe = jedis.pipelined(); + pipe.set(key, val); expect.add("OK"); + pipe.watch(key); expect.add("OK"); + pipe.multi(); expect.add("OK"); + pipe.unwatch(); expect.add("QUEUED"); expMulti.add("OK"); + pipe.get(key); expect.add("QUEUED"); expMulti.add(val); + pipe.exec(); expect.add(expMulti); + + assertEquals(expect, pipe.syncAndReturnAll()); + } + @Test(expected = JedisDataException.class) public void pipelineExecShoudThrowJedisDataExceptionWhenNotInMulti() { Pipeline pipeline = jedis.pipelined();