diff --git a/redisson/src/main/java/org/redisson/connection/ClientConnectionsEntry.java b/redisson/src/main/java/org/redisson/connection/ClientConnectionsEntry.java index b826154ea..051b2e8fe 100644 --- a/redisson/src/main/java/org/redisson/connection/ClientConnectionsEntry.java +++ b/redisson/src/main/java/org/redisson/connection/ClientConnectionsEntry.java @@ -25,6 +25,7 @@ import org.redisson.client.RedisClient; import org.redisson.client.RedisConnection; import org.redisson.client.RedisPubSubConnection; import org.redisson.config.MasterSlaveServersConfig; +import org.redisson.config.ReadMode; import org.redisson.pubsub.AsyncSemaphore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,6 +74,10 @@ public class ClientConnectionsEntry { connectionManager.getConnectionWatcher().add(poolMinSize, poolMaxSize, freeConnections, freeConnectionsCounter); } + public boolean isMasterForRead() { + return getFreezeReason() == FreezeReason.SYSTEM && getConfig().getReadMode() == ReadMode.MASTER_SLAVE; + } + public void setNodeType(NodeType nodeType) { this.nodeType = nodeType; } 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 d6b771bb6..b8cea95a9 100644 --- a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java +++ b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java @@ -29,7 +29,6 @@ import org.redisson.client.RedisConnectionException; import org.redisson.client.protocol.RedisCommand; import org.redisson.client.protocol.RedisCommands; import org.redisson.config.MasterSlaveServersConfig; -import org.redisson.config.ReadMode; import org.redisson.connection.ClientConnectionsEntry; import org.redisson.connection.ClientConnectionsEntry.FreezeReason; import org.redisson.connection.ConnectionManager; @@ -168,8 +167,7 @@ abstract class ConnectionPool { List entriesCopy = new LinkedList(entries); while (!entriesCopy.isEmpty()) { ClientConnectionsEntry entry = config.getLoadBalancer().getEntry(entriesCopy); - if ((!entry.isFreezed() || - (entry.getFreezeReason() == FreezeReason.SYSTEM && config.getReadMode() == ReadMode.MASTER_SLAVE)) && + if ((!entry.isFreezed() || entry.isMasterForRead()) && tryAcquireConnection(entry)) { return acquireConnection(command, entry); } @@ -421,7 +419,7 @@ abstract class ConnectionPool { } public void returnConnection(ClientConnectionsEntry entry, T connection) { - if (entry.isFreezed()) { + if (entry.isFreezed() && !entry.isMasterForRead()) { connection.closeAsync(); } else { releaseConnection(entry, connection);