reconnect wrapped Channel in RedisConnection when RefreshConnectionAfterFails has been reached. #198

pull/282/head
Nikita 10 years ago
parent d484c19598
commit 51542946d0

@ -69,7 +69,7 @@ class BaseConfig<T extends BaseConfig<T>> {
setTimeout(config.getTimeout());
setClientName(config.getClientName());
setPingTimeout(config.getPingTimeout());
setCloseConnectionAfterFailAttempts(config.getCloseConnectionAfterFailAttempts());
setRefreshConnectionAfterFails(config.getRefreshConnectionAfterFails());
}
/**
@ -190,16 +190,16 @@ class BaseConfig<T extends BaseConfig<T>> {
}
/**
* Close connection if it has <code>failAttemptsAmount</code>
* Reconnect connection if it has <code>failAttemptsAmount</code>
* fails in a row during command sending. Turned off by default.
*
* @param failAttemptsAmount
*/
public T setCloseConnectionAfterFailAttempts(int failAttemptsAmount) {
public T setRefreshConnectionAfterFails(int failAttemptsAmount) {
this.closeConnectionAfterFailAttempts = failAttemptsAmount;
return (T) this;
}
public int getCloseConnectionAfterFailAttempts() {
public int getRefreshConnectionAfterFails() {
return closeConnectionAfterFailAttempts;
}

@ -135,6 +135,10 @@ public class RedisConnection implements RedisCommands {
return closed;
}
public void forceReconnect() {
channel.close();
}
public ChannelFuture closeAsync() {
setClosed(true);
return channel.close();

@ -225,9 +225,12 @@ abstract class BaseLoadBalancer implements LoadBalancer {
public void returnConnection(RedisConnection connection) {
SubscribesConnectionEntry entry = clients.get(connection.getRedisClient());
if (entry.isFreezed() || connection.getFailAttempts() == config.getCloseConnectionAfterFailAttempts()) {
if (entry.isFreezed()) {
connection.closeAsync();
} else {
if (connection.getFailAttempts() == config.getRefreshConnectionAfterFails()) {
connection.forceReconnect();
}
entry.getConnections().add(connection);
}
entry.getConnectionsSemaphore().release();

@ -244,7 +244,7 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager {
c.setPassword(cfg.getPassword());
c.setDatabase(cfg.getDatabase());
c.setClientName(cfg.getClientName());
c.setCloseConnectionAfterFailAttempts(cfg.getCloseConnectionAfterFailAttempts());
c.setRefreshConnectionAfterFails(cfg.getRefreshConnectionAfterFails());
c.setMasterConnectionPoolSize(cfg.getMasterConnectionPoolSize());
c.setSlaveConnectionPoolSize(cfg.getSlaveConnectionPoolSize());
c.setSlaveSubscriptionConnectionPoolSize(cfg.getSlaveSubscriptionConnectionPoolSize());

@ -175,10 +175,8 @@ public class MasterSlaveEntry {
if (!entry.getClient().equals(connection.getRedisClient())) {
connection.closeAsync();
return;
} else if (connection.getFailAttempts() == config.getCloseConnectionAfterFailAttempts()) {
connection.closeAsync();
entry.getConnectionsSemaphore().release();
return;
} else if (connection.getFailAttempts() == config.getRefreshConnectionAfterFails()) {
connection.forceReconnect();
}
entry.getConnections().add(connection);

@ -61,7 +61,7 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager {
c.setPassword(cfg.getPassword());
c.setDatabase(cfg.getDatabase());
c.setClientName(cfg.getClientName());
c.setCloseConnectionAfterFailAttempts(cfg.getCloseConnectionAfterFailAttempts());
c.setRefreshConnectionAfterFails(cfg.getRefreshConnectionAfterFails());
c.setMasterConnectionPoolSize(cfg.getMasterConnectionPoolSize());
c.setSlaveConnectionPoolSize(cfg.getSlaveConnectionPoolSize());
c.setSlaveSubscriptionConnectionPoolSize(cfg.getSlaveSubscriptionConnectionPoolSize());

@ -48,7 +48,7 @@ public class SingleConnectionManager extends MasterSlaveConnectionManager {
newconfig.setPassword(cfg.getPassword());
newconfig.setDatabase(cfg.getDatabase());
newconfig.setClientName(cfg.getClientName());
newconfig.setCloseConnectionAfterFailAttempts(cfg.getCloseConnectionAfterFailAttempts());
newconfig.setRefreshConnectionAfterFails(cfg.getRefreshConnectionAfterFails());
newconfig.setMasterAddress(addr);
newconfig.setMasterConnectionPoolSize(cfg.getConnectionPoolSize());
newconfig.setSubscriptionsPerConnection(cfg.getSubscriptionsPerConnection());

Loading…
Cancel
Save