Fixed - RedisTimeoutException is thrown if retryInterval set to 0 #2175

pull/2300/head
Nikita Koksharov 6 years ago
parent 87d603c7d3
commit f4611f0035

@ -69,6 +69,7 @@ import org.redisson.codec.ReferenceCodecProvider;
import org.redisson.config.Config; import org.redisson.config.Config;
import org.redisson.config.MasterSlaveServersConfig; import org.redisson.config.MasterSlaveServersConfig;
import org.redisson.connection.ConnectionManager; import org.redisson.connection.ConnectionManager;
import org.redisson.connection.MasterSlaveConnectionManager;
import org.redisson.connection.MasterSlaveEntry; import org.redisson.connection.MasterSlaveEntry;
import org.redisson.connection.NodeSource; import org.redisson.connection.NodeSource;
import org.redisson.connection.NodeSource.Redirect; import org.redisson.connection.NodeSource.Redirect;
@ -649,7 +650,7 @@ public class CommandAsyncService implements CommandAsyncExecutor {
return mainPromise; return mainPromise;
} }
@SuppressWarnings({"NestedIfDepth"}) @SuppressWarnings({"NestedIfDepth", "MethodLength"})
public <V, R> void async(boolean readOnlyMode, NodeSource source, Codec codec, public <V, R> void async(boolean readOnlyMode, NodeSource source, Codec codec,
RedisCommand<V> command, Object[] params, RPromise<R> mainPromise, int attempt, RedisCommand<V> command, Object[] params, RPromise<R> mainPromise, int attempt,
boolean ignoreRedirect) { boolean ignoreRedirect) {
@ -718,7 +719,13 @@ public class CommandAsyncService implements CommandAsyncExecutor {
return; return;
} }
details.incAttempt(); 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); details.setTimeout(timeout);
return; 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.setTimeout(timeout);
details.setupMainPromiseListener(mainPromiseListener); details.setupMainPromiseListener(mainPromiseListener);

@ -50,6 +50,7 @@ import org.redisson.client.protocol.CommandsData;
import org.redisson.client.protocol.RedisCommand; import org.redisson.client.protocol.RedisCommand;
import org.redisson.client.protocol.RedisCommands; import org.redisson.client.protocol.RedisCommands;
import org.redisson.connection.ConnectionManager; import org.redisson.connection.ConnectionManager;
import org.redisson.connection.MasterSlaveConnectionManager;
import org.redisson.connection.MasterSlaveEntry; import org.redisson.connection.MasterSlaveEntry;
import org.redisson.connection.NodeSource; import org.redisson.connection.NodeSource;
import org.redisson.connection.NodeSource.Redirect; import org.redisson.connection.NodeSource.Redirect;
@ -679,7 +680,14 @@ public class CommandBatchService extends CommandAsyncService {
return; return;
} }
details.incAttempt(); 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); details.setTimeout(timeout);
return; return;
} }

@ -86,7 +86,7 @@ import io.netty.util.internal.PlatformDependent;
*/ */
public class MasterSlaveConnectionManager implements ConnectionManager { public class MasterSlaveConnectionManager implements ConnectionManager {
private final Timeout dummyTimeout = new Timeout() { public static final Timeout DUMMY_TIMEOUT = new Timeout() {
@Override @Override
public Timer timer() { public Timer timer() {
return null; return null;
@ -109,7 +109,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
@Override @Override
public boolean cancel() { public boolean cancel() {
return false; return true;
} }
}; };
@ -685,7 +685,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
return timer.newTimeout(task, delay, unit); return timer.newTimeout(task, delay, unit);
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
// timer is shutdown // timer is shutdown
return dummyTimeout; return DUMMY_TIMEOUT;
} }
} }

Loading…
Cancel
Save