From 69329c8dbdf8bf055bfd9951028d9250024d22e4 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Thu, 27 Jan 2022 12:25:50 +0300 Subject: [PATCH] Fixed - RedisTimeoutException: Command execution timeout for command: (PING) (regression since 3.16.3) #3867 --- .../redisson/client/handler/PingConnectionHandler.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java b/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java index b008a1522..39b0b5f26 100644 --- a/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java +++ b/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java @@ -22,6 +22,7 @@ import org.redisson.api.RFuture; import org.redisson.client.RedisClientConfig; import org.redisson.client.RedisConnection; import org.redisson.client.codec.StringCodec; +import org.redisson.client.protocol.CommandData; import org.redisson.client.protocol.RedisCommands; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,7 +59,8 @@ public class PingConnectionHandler extends ChannelInboundHandlerAdapter { private void sendPing(ChannelHandlerContext ctx) { RedisConnection connection = RedisConnection.getFrom(ctx.channel()); RFuture future; - if (connection.getUsage() == 0) { + CommandData currentCommand = connection.getCurrentCommand(); + if (connection.getUsage() == 0 && (currentCommand == null || !currentCommand.isBlockingCommand())) { future = connection.async(StringCodec.INSTANCE, RedisCommands.PING); } else { future = null; @@ -69,6 +71,12 @@ public class PingConnectionHandler extends ChannelInboundHandlerAdapter { return; } + CommandData cd = connection.getCurrentCommand(); + if (cd != null && cd.isBlockingCommand()) { + sendPing(ctx); + return; + } + if (connection.getUsage() == 0 && future != null && (future.cancel(false) || !future.isSuccess())) {