diff --git a/src/main/java/org/redisson/client/handler/CommandDecoder.java b/src/main/java/org/redisson/client/handler/CommandDecoder.java index 4ef080b03..f7b150e9e 100644 --- a/src/main/java/org/redisson/client/handler/CommandDecoder.java +++ b/src/main/java/org/redisson/client/handler/CommandDecoder.java @@ -100,8 +100,10 @@ public class CommandDecoder extends ReplayingDecoder { try { // if (state().getSize() > 0) { // List respParts = new ArrayList(); -// respParts.addAll(state().getRespParts()); -// decodeMulti(in, cmd, null, ctx.channel(), currentDecoder, state().getSize(), respParts); +// if (state().getRespParts() != null) { +// respParts = state().getRespParts(); +// } +// decodeMulti(in, cmd, null, ctx.channel(), currentDecoder, state().getSize(), respParts, true); // } else { decode(in, cmd, null, ctx.channel(), currentDecoder); // } @@ -149,7 +151,6 @@ public class CommandDecoder extends ReplayingDecoder { } } else { if (!promise.trySuccess(null) && promise.cause() instanceof RedisTimeoutException) { - // TODO try increase timeout log.warn("response has been skipped due to timeout! channel: {}, command: {}", ctx.channel(), data); } } @@ -214,21 +215,27 @@ public class CommandDecoder extends ReplayingDecoder { handleResult(data, parts, result, false, channel); } else if (code == '*') { long size = readLong(in); -// state().setSizeOnce(size); - List respParts = new ArrayList(); + boolean top = false; +// if (state().trySetSize(size)) { +// state().setRespParts(respParts); +// top = true; +// } - decodeMulti(in, data, parts, channel, currentDecoder, size, respParts); + decodeMulti(in, data, parts, channel, currentDecoder, size, respParts, top); } else { throw new IllegalStateException("Can't decode replay " + (char)code); } } private void decodeMulti(ByteBuf in, CommandData data, List parts, - Channel channel, Decoder currentDecoder, long size, List respParts) + Channel channel, Decoder currentDecoder, long size, List respParts, boolean top) throws IOException { for (int i = respParts.size(); i < size; i++) { decode(in, data, respParts, channel, currentDecoder); +// if (top) { +// checkpoint(); +// } } MultiDecoder decoder = messageDecoder(data, respParts, channel); @@ -250,9 +257,6 @@ public class CommandDecoder extends ReplayingDecoder { } } else { handleMultiResult(data, parts, channel, result); -// if (parts != null && !decoder.isApplicable(parts.size(), state())) { -// state().setRespParts(parts); -// } } } diff --git a/src/main/java/org/redisson/client/handler/State.java b/src/main/java/org/redisson/client/handler/State.java index 8eed56b08..d9d1ba579 100644 --- a/src/main/java/org/redisson/client/handler/State.java +++ b/src/main/java/org/redisson/client/handler/State.java @@ -29,11 +29,12 @@ public class State { super(); } - public void setSizeOnce(long size) { + public boolean trySetSize(long size) { if (this.size != 0) { - return; + return false; } this.size = size; + return true; } public long getSize() { return size;