diff --git a/src/main/java/org/redisson/RedissonList.java b/src/main/java/org/redisson/RedissonList.java index 1b34b56dc..3a0fe6873 100644 --- a/src/main/java/org/redisson/RedissonList.java +++ b/src/main/java/org/redisson/RedissonList.java @@ -167,19 +167,30 @@ public class RedissonList extends RedissonExpirable implements RList { promise.setSuccess(false); return promise; } - final int listSize = size(); - List args = new ArrayList(c.size() + 1); - args.add(getName()); - args.addAll(c); - Future res = commandExecutor.writeAsync(getName(), codec, RPUSH, args.toArray()); - res.addListener(new FutureListener() { + Future sizeFuture = sizeAsync(); + sizeFuture.addListener(new FutureListener() { @Override - public void operationComplete(Future future) throws Exception { - if (future.isSuccess()) { - promise.setSuccess(listSize != future.getNow()); - } else { + public void operationComplete(Future future) throws Exception { + if (!future.isSuccess()) { promise.setFailure(future.cause()); + return; } + + final int listSize = future.getNow(); + List args = new ArrayList(c.size() + 1); + args.add(getName()); + args.addAll(c); + Future res = commandExecutor.writeAsync(getName(), codec, RPUSH, args.toArray()); + res.addListener(new FutureListener() { + @Override + public void operationComplete(Future future) throws Exception { + if (future.isSuccess()) { + promise.setSuccess(listSize != future.getNow()); + } else { + promise.setFailure(future.cause()); + } + } + }); } }); return promise;