diff --git a/redisson/src/main/java/org/redisson/connection/ClientConnectionsEntry.java b/redisson/src/main/java/org/redisson/connection/ClientConnectionsEntry.java index 51244c29c..85f1ede7c 100644 --- a/redisson/src/main/java/org/redisson/connection/ClientConnectionsEntry.java +++ b/redisson/src/main/java/org/redisson/connection/ClientConnectionsEntry.java @@ -48,7 +48,6 @@ public class ClientConnectionsEntry { public enum FreezeReason {MANAGER, RECONNECT, SYSTEM} - private volatile boolean freezed; private volatile FreezeReason freezeReason; final RedisClient client; @@ -110,7 +109,7 @@ public class ClientConnectionsEntry { } public boolean isFreezed() { - return freezed; + return freezeReason != null; } public void setFreezeReason(FreezeReason freezeReason) { @@ -121,10 +120,6 @@ public class ClientConnectionsEntry { return freezeReason; } - public void setFreezed(boolean freezed) { - this.freezed = freezed; - } - public void reset() { freeConnectionsCounter.removeListeners(); freeSubscribeConnectionsCounter.removeListeners(); @@ -250,19 +245,12 @@ public class ClientConnectionsEntry { freeSubscribeConnectionsCounter.release(); } - public void freezeMaster(FreezeReason reason) { - synchronized (this) { - setFreezed(true); - setFreezeReason(reason); - } - } - @Override public String toString() { return "[freeSubscribeConnectionsAmount=" + freeSubscribeConnections.size() + ", freeSubscribeConnectionsCounter=" + freeSubscribeConnectionsCounter + ", freeConnectionsAmount=" + freeConnections.size() + ", freeConnectionsCounter=" - + freeConnectionsCounter + ", freezed=" + freezed + ", freezeReason=" + freezeReason + + freeConnectionsCounter + ", freezeReason=" + freezeReason + ", client=" + client + ", nodeType=" + nodeType + ", firstFail=" + firstFailTime + "]"; } diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java index 2a8f10b9d..f95395f48 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java @@ -325,7 +325,6 @@ public class MasterSlaveEntry { config.getSubscriptionConnectionPoolSize(), connectionManager, nodeType); if (freezed) { synchronized (entry) { - entry.setFreezed(freezed); entry.setFreezeReason(FreezeReason.SYSTEM); } } @@ -453,8 +452,10 @@ public class MasterSlaveEntry { writeConnectionPool.remove(oldMaster); pubSubConnectionPool.remove(oldMaster); - - oldMaster.freezeMaster(FreezeReason.MANAGER); + + synchronized (oldMaster) { + oldMaster.setFreezeReason(FreezeReason.MANAGER); + } slaveDown(oldMaster); slaveBalancer.changeType(oldMaster.getClient().getAddr(), NodeType.SLAVE); diff --git a/redisson/src/main/java/org/redisson/connection/balancer/LoadBalancerManager.java b/redisson/src/main/java/org/redisson/connection/balancer/LoadBalancerManager.java index 5a5a98f70..00ca07936 100644 --- a/redisson/src/main/java/org/redisson/connection/balancer/LoadBalancerManager.java +++ b/redisson/src/main/java/org/redisson/connection/balancer/LoadBalancerManager.java @@ -135,11 +135,10 @@ public class LoadBalancerManager { if (!entry.isFreezed()) { return false; } - if ((freezeReason == FreezeReason.RECONNECT - && entry.getFreezeReason() == FreezeReason.RECONNECT) - || freezeReason != FreezeReason.RECONNECT) { + + if (freezeReason != FreezeReason.RECONNECT + || entry.getFreezeReason() == FreezeReason.RECONNECT) { entry.resetFirstFail(); - entry.setFreezed(false); entry.setFreezeReason(null); slaveConnectionPool.initConnections(entry); @@ -169,19 +168,19 @@ public class LoadBalancerManager { } synchronized (connectionEntry) { + if (connectionEntry.isFreezed()) { + return null; + } + // only RECONNECT freeze reason could be replaced if (connectionEntry.getFreezeReason() == null || connectionEntry.getFreezeReason() == FreezeReason.RECONNECT || (freezeReason == FreezeReason.MANAGER && connectionEntry.getFreezeReason() != FreezeReason.MANAGER && connectionEntry.getNodeType() == NodeType.SLAVE)) { - connectionEntry.setFreezed(true); connectionEntry.setFreezeReason(freezeReason); return connectionEntry; } - if (connectionEntry.isFreezed()) { - return null; - } } return connectionEntry; diff --git a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java index 4718f3cb5..2b1274987 100644 --- a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java +++ b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java @@ -366,7 +366,6 @@ abstract class ConnectionPool { public void run(Timeout timeout) throws Exception { synchronized (entry) { if (entry.getFreezeReason() != FreezeReason.RECONNECT - || !entry.isFreezed() || connectionManager.isShuttingDown()) { return; } @@ -375,8 +374,7 @@ abstract class ConnectionPool { RFuture connectionFuture = entry.getClient().connectAsync(); connectionFuture.onComplete((c, e) -> { synchronized (entry) { - if (entry.getFreezeReason() != FreezeReason.RECONNECT - || !entry.isFreezed()) { + if (entry.getFreezeReason() != FreezeReason.RECONNECT) { return; } } @@ -396,8 +394,7 @@ abstract class ConnectionPool { public void accept(String t, Throwable u) { try { synchronized (entry) { - if (entry.getFreezeReason() != FreezeReason.RECONNECT - || !entry.isFreezed()) { + if (entry.getFreezeReason() != FreezeReason.RECONNECT) { return; } }