Fixed - connection leak in Topology Manager for Replicated Redis config. #3518

pull/3941/head
Nikita Koksharov 4 years ago
parent acbff29eab
commit 09f733965e

@ -213,7 +213,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
} }
protected void closeNodeConnection(RedisConnection conn) { protected void closeNodeConnection(RedisConnection conn) {
if (nodeConnections.values().remove(conn)) { if (nodeConnections.values().removeAll(Arrays.asList(conn))) {
conn.closeAsync(); conn.closeAsync();
} }
} }
@ -221,6 +221,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
protected final void disconnectNode(RedisURI addr) { protected final void disconnectNode(RedisURI addr) {
RedisConnection conn = nodeConnections.remove(addr); RedisConnection conn = nodeConnections.remove(addr);
if (conn != null) { if (conn != null) {
nodeConnections.values().removeAll(Arrays.asList(conn));
conn.closeAsync(); conn.closeAsync();
} }
} }
@ -233,8 +234,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
RedisConnection conn = nodeConnections.get(addr); RedisConnection conn = nodeConnections.get(addr);
if (conn != null) { if (conn != null) {
if (!conn.isActive()) { if (!conn.isActive()) {
nodeConnections.remove(addr); closeNodeConnection(conn);
conn.closeAsync();
} else { } else {
return RedissonPromise.newSucceededFuture(conn); return RedissonPromise.newSucceededFuture(conn);
} }
@ -251,13 +251,13 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
if (connection.isActive()) { if (connection.isActive()) {
boolean isHostname = NetUtil.createByteArrayFromIpAddressString(addr.getHost()) == null; boolean isHostname = NetUtil.createByteArrayFromIpAddressString(addr.getHost()) == null;
RedisURI address = addr;
if (isHostname) { if (isHostname) {
address = new RedisURI(addr.getScheme() RedisURI address = new RedisURI(addr.getScheme()
+ "://" + connection.getRedisClient().getAddr().getAddress().getHostAddress() + "://" + connection.getRedisClient().getAddr().getAddress().getHostAddress()
+ ":" + connection.getRedisClient().getAddr().getPort()); + ":" + connection.getRedisClient().getAddr().getPort());
nodeConnections.put(address, connection);
} }
nodeConnections.put(address, connection); nodeConnections.put(addr, connection);
result.trySuccess(connection); result.trySuccess(connection);
} else { } else {
connection.closeAsync(); connection.closeAsync();

Loading…
Cancel
Save