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/MasterSlaveEntry.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java index 2dfd10e2e..3dc0c0ac1 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java @@ -343,7 +343,7 @@ public class MasterSlaveEntry { } private RFuture addSlave(URI address, final boolean freezed, final NodeType nodeType) { - RedisClient client = connectionManager.createClient(NodeType.SLAVE, address, sslHostname); + RedisClient client = connectionManager.createClient(nodeType, address, sslHostname); return addSlave(client, freezed, 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);