diff --git a/redisson/src/main/java/org/redisson/command/RedisExecutor.java b/redisson/src/main/java/org/redisson/command/RedisExecutor.java index 353bc0046..1910fc3e9 100644 --- a/redisson/src/main/java/org/redisson/command/RedisExecutor.java +++ b/redisson/src/main/java/org/redisson/command/RedisExecutor.java @@ -226,17 +226,11 @@ public class RedisExecutor { } attempt++; - Timeout timeout; - if (retryInterval > 0 && attempts > 0) { - timeout = connectionManager.newTimeout(this, retryInterval, TimeUnit.MILLISECONDS); - } else { - timeout = MasterSlaveConnectionManager.DUMMY_TIMEOUT; - } - RedisExecutor.this.timeout = timeout; + scheduleRetryTimeout(connectionFuture, attemptPromise); return; } - if (writeFuture.isDone() && writeFuture.isSuccess()) { + if (writeFuture.isSuccess()) { return; } } @@ -308,6 +302,10 @@ public class RedisExecutor { timeout.cancel(); + scheduleResponseTimeout(attemptPromise, connection); + } + + private void scheduleResponseTimeout(RPromise attemptPromise, RedisConnection connection) { long timeoutTime = responseTimeout; if (command != null && (RedisCommands.BLOCKING_COMMAND_NAMES.contains(command.getName()) diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index b19b2045a..f3b5cfb7b 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -666,8 +666,8 @@ public class MasterSlaveConnectionManager implements ConnectionManager { result.awaitUninterruptibly(timeout, unit); resolverGroup.close(); - timer.stop(); shutdownLatch.close(); + timer.stop(); shutdownPromise.trySuccess(null); shutdownLatch.awaitUninterruptibly(); @@ -697,8 +697,11 @@ public class MasterSlaveConnectionManager implements ConnectionManager { try { return timer.newTimeout(task, delay, unit); } catch (IllegalStateException e) { - // timer is shutdown - return DUMMY_TIMEOUT; + if (isShuttingDown()) { + return DUMMY_TIMEOUT; + } + + throw e; } }