diff --git a/src/main/java/redis/clients/jedis/Pipeline.java b/src/main/java/redis/clients/jedis/Pipeline.java index 2687f84..50fbe3f 100755 --- a/src/main/java/redis/clients/jedis/Pipeline.java +++ b/src/main/java/redis/clients/jedis/Pipeline.java @@ -104,12 +104,18 @@ public class Pipeline extends MultiKeyPipelineBase { } public Response discard() { + if (currentMulti == null) + throw new JedisDataException("DISCARD without MULTI"); + client.discard(); currentMulti = null; return getResponse(BuilderFactory.STRING); } public Response> exec() { + if (currentMulti == null) + throw new JedisDataException("EXEC without MULTI"); + client.exec(); Response> response = super.getResponse(currentMulti); currentMulti.setResponseDependency(response); @@ -118,6 +124,9 @@ public class Pipeline extends MultiKeyPipelineBase { } public Response multi() { + if (currentMulti != null) + throw new JedisDataException("MULTI calls can not be nested"); + client.multi(); Response response = getResponse(BuilderFactory.STRING); // Expecting // OK diff --git a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java index d3cddd0..29b2f86 100755 --- a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java +++ b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java @@ -272,6 +272,26 @@ public class PipeliningTest extends Assert { assertEquals("world", r3.get()); } + @Test(expected = JedisDataException.class) + public void pipelineExecShoudThrowJedisDataExceptionWhenNotInMulti() { + Pipeline pipeline = jedis.pipelined(); + pipeline.exec(); + } + + @Test(expected = JedisDataException.class) + public void pipelineDiscardShoudThrowJedisDataExceptionWhenNotInMulti() { + Pipeline pipeline = jedis.pipelined(); + pipeline.discard(); + } + + @Test(expected = JedisDataException.class) + public void pipelineMultiShoudThrowJedisDataExceptionWhenAlreadyInMulti() { + Pipeline pipeline = jedis.pipelined(); + pipeline.multi(); + pipeline.set("foo", "3"); + pipeline.multi(); + } + @Test public void testDiscardInPipeline() { Pipeline pipeline = jedis.pipelined();