diff --git a/src/main/java/redis/clients/jedis/Pipeline.java b/src/main/java/redis/clients/jedis/Pipeline.java index 44316f1..95e8217 100644 --- a/src/main/java/redis/clients/jedis/Pipeline.java +++ b/src/main/java/redis/clients/jedis/Pipeline.java @@ -88,19 +88,20 @@ public class Pipeline extends MultiKeyPipelineBase { } /** - * Syncronize pipeline by reading all responses. This operation close the + * Synchronize pipeline by reading all responses. This operation close the * pipeline. In order to get return values from pipelined commands, capture * the different Response of the commands you execute. */ public void sync() { - List unformatted = client.getMany(getPipelinedResponseLength()); - for (Object o : unformatted) { - generateResponse(o); - } + if (getPipelinedResponseLength() > 0) { + List unformatted = client.getMany(getPipelinedResponseLength()); + for (Object o : unformatted) { + generateResponse(o); + } + } } - /** - * Syncronize pipeline by reading all responses. This operation close the + * Synchronize pipeline by reading all responses. This operation close the * pipeline. Whenever possible try to avoid using this version and use * Pipeline.sync() as it won't go through all the responses and generate the * right response type (usually it is a waste of time). @@ -108,17 +109,20 @@ public class Pipeline extends MultiKeyPipelineBase { * @return A list of all the responses in the order you executed them. */ public List syncAndReturnAll() { - List unformatted = client.getMany(getPipelinedResponseLength()); - List formatted = new ArrayList(); - - for (Object o : unformatted) { - try { - formatted.add(generateResponse(o).get()); - } catch (JedisDataException e) { - formatted.add(e); - } - } - return formatted; + if (getPipelinedResponseLength() > 0) { + List unformatted = client.getMany(getPipelinedResponseLength()); + List formatted = new ArrayList(); + for (Object o : unformatted) { + try { + formatted.add(generateResponse(o).get()); + } catch (JedisDataException e) { + formatted.add(e); + } + } + return formatted; + } else { + return java.util.Collections.emptyList(); + } } public Response discard() { diff --git a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java index ca3b6f3..45e6463 100644 --- a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java +++ b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java @@ -450,6 +450,25 @@ public class PipeliningTest extends Assert { assertTrue(result.get(3) instanceof JedisDataException); } + + @Test + public void testSyncWithNoCommandQueued() { + // we need to test with fresh instance of Jedis + Jedis jedis2 = new Jedis(hnp.getHost(), hnp.getPort(), 500); + + Pipeline pipeline = jedis2.pipelined(); + pipeline.sync(); + + jedis2.close(); + + jedis2 = new Jedis(hnp.getHost(), hnp.getPort(), 500); + + pipeline = jedis2.pipelined(); + List resp = pipeline.syncAndReturnAll(); + assertTrue(resp.isEmpty()); + + jedis2.close(); + } private void verifyHasBothValues(String firstKey, String secondKey, String value1, String value2) { diff --git a/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java b/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java index bf9b2bd..a6dfaab 100644 --- a/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java +++ b/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java @@ -4,6 +4,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import java.io.UnsupportedEncodingException; import java.util.ArrayList; @@ -18,6 +19,7 @@ import org.junit.Test; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisShardInfo; +import redis.clients.jedis.Pipeline; import redis.clients.jedis.Response; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPipeline; @@ -130,4 +132,32 @@ public class ShardedJedisPipelineTest { p.sync(); assertNull(shouldNotExist.get()); } + + @Test + public void testSyncWithNoCommandQueued() { + JedisShardInfo shardInfo1 = new JedisShardInfo(redis1.getHost(), + redis1.getPort()); + JedisShardInfo shardInfo2 = new JedisShardInfo(redis2.getHost(), + redis2.getPort()); + shardInfo1.setPassword("foobared"); + shardInfo2.setPassword("foobared"); + List shards = new ArrayList(); + shards.add(shardInfo1); + shards.add(shardInfo2); + + ShardedJedis jedis2 = new ShardedJedis(shards); + + ShardedJedisPipeline pipeline = jedis2.pipelined(); + pipeline.sync(); + + jedis2.close(); + + jedis2 = new ShardedJedis(shards); + pipeline = jedis2.pipelined(); + List resp = pipeline.syncAndReturnAll(); + assertTrue(resp.isEmpty()); + + jedis2.close(); + } + }