From f4611f0035fd13c170b13ff31ab082bb53237477 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Thu, 1 Aug 2019 15:11:28 +0300 Subject: [PATCH] Fixed - RedisTimeoutException is thrown if retryInterval set to 0 #2175 --- .../redisson/command/CommandAsyncService.java | 18 +++++++++++++++--- .../redisson/command/CommandBatchService.java | 10 +++++++++- .../MasterSlaveConnectionManager.java | 6 +++--- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/redisson/src/main/java/org/redisson/command/CommandAsyncService.java b/redisson/src/main/java/org/redisson/command/CommandAsyncService.java index dfc58a9aa..840b35cd7 100644 --- a/redisson/src/main/java/org/redisson/command/CommandAsyncService.java +++ b/redisson/src/main/java/org/redisson/command/CommandAsyncService.java @@ -69,6 +69,7 @@ import org.redisson.codec.ReferenceCodecProvider; import org.redisson.config.Config; import org.redisson.config.MasterSlaveServersConfig; import org.redisson.connection.ConnectionManager; +import org.redisson.connection.MasterSlaveConnectionManager; import org.redisson.connection.MasterSlaveEntry; import org.redisson.connection.NodeSource; import org.redisson.connection.NodeSource.Redirect; @@ -649,7 +650,7 @@ public class CommandAsyncService implements CommandAsyncExecutor { return mainPromise; } - @SuppressWarnings({"NestedIfDepth"}) + @SuppressWarnings({"NestedIfDepth", "MethodLength"}) public void async(boolean readOnlyMode, NodeSource source, Codec codec, RedisCommand command, Object[] params, RPromise mainPromise, int attempt, boolean ignoreRedirect) { @@ -718,7 +719,13 @@ public class CommandAsyncService implements CommandAsyncExecutor { return; } details.incAttempt(); - Timeout timeout = connectionManager.newTimeout(this, connectionManager.getConfig().getRetryInterval(), TimeUnit.MILLISECONDS); + + Timeout timeout; + if (connectionManager.getConfig().getRetryInterval() > 0) { + timeout = connectionManager.newTimeout(this, connectionManager.getConfig().getRetryInterval(), TimeUnit.MILLISECONDS); + } else { + timeout = MasterSlaveConnectionManager.DUMMY_TIMEOUT; + } details.setTimeout(timeout); return; } @@ -762,7 +769,12 @@ public class CommandAsyncService implements CommandAsyncExecutor { }; - Timeout timeout = connectionManager.newTimeout(retryTimerTask, connectionManager.getConfig().getRetryInterval(), TimeUnit.MILLISECONDS); + Timeout timeout; + if (connectionManager.getConfig().getRetryInterval() > 0) { + timeout = connectionManager.newTimeout(retryTimerTask, connectionManager.getConfig().getRetryInterval(), TimeUnit.MILLISECONDS); + } else { + timeout = MasterSlaveConnectionManager.DUMMY_TIMEOUT; + } details.setTimeout(timeout); details.setupMainPromiseListener(mainPromiseListener); diff --git a/redisson/src/main/java/org/redisson/command/CommandBatchService.java b/redisson/src/main/java/org/redisson/command/CommandBatchService.java index abbe9456c..7e473dfeb 100644 --- a/redisson/src/main/java/org/redisson/command/CommandBatchService.java +++ b/redisson/src/main/java/org/redisson/command/CommandBatchService.java @@ -50,6 +50,7 @@ import org.redisson.client.protocol.CommandsData; import org.redisson.client.protocol.RedisCommand; import org.redisson.client.protocol.RedisCommands; import org.redisson.connection.ConnectionManager; +import org.redisson.connection.MasterSlaveConnectionManager; import org.redisson.connection.MasterSlaveEntry; import org.redisson.connection.NodeSource; import org.redisson.connection.NodeSource.Redirect; @@ -679,7 +680,14 @@ public class CommandBatchService extends CommandAsyncService { return; } details.incAttempt(); - Timeout timeout = connectionManager.newTimeout(this, interval, TimeUnit.MILLISECONDS); + + Timeout timeout; + if (interval > 0) { + timeout = connectionManager.newTimeout(this, interval, TimeUnit.MILLISECONDS); + } else { + timeout = MasterSlaveConnectionManager.DUMMY_TIMEOUT; + } + details.setTimeout(timeout); return; } diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index b90514311..eada9a4ef 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -86,7 +86,7 @@ import io.netty.util.internal.PlatformDependent; */ public class MasterSlaveConnectionManager implements ConnectionManager { - private final Timeout dummyTimeout = new Timeout() { + public static final Timeout DUMMY_TIMEOUT = new Timeout() { @Override public Timer timer() { return null; @@ -109,7 +109,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { @Override public boolean cancel() { - return false; + return true; } }; @@ -685,7 +685,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { return timer.newTimeout(task, delay, unit); } catch (IllegalStateException e) { // timer is shutdown - return dummyTimeout; + return DUMMY_TIMEOUT; } }