From 70496c5617a1201bc5bd0108bd79197413db032f Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Fri, 26 Feb 2021 11:43:12 +0300 Subject: [PATCH] Fixed - continuous reconnecting to broken host if it was defined as hostname in Redisson Cluster config. #3435 --- .../connection/MasterSlaveConnectionManager.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index 9dc3c3e41..6d6af51c0 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -23,6 +23,9 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import io.netty.util.*; +import io.netty.util.Timer; +import io.netty.util.TimerTask; import org.redisson.ElementsSubscribeService; import org.redisson.Version; import org.redisson.api.NodeType; @@ -60,10 +63,6 @@ import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.resolver.AddressResolverGroup; import io.netty.resolver.DefaultAddressResolverGroup; import io.netty.resolver.dns.DnsServerAddressStreamProviders; -import io.netty.util.HashedWheelTimer; -import io.netty.util.Timeout; -import io.netty.util.Timer; -import io.netty.util.TimerTask; import io.netty.util.concurrent.DefaultThreadFactory; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.ImmediateEventExecutor; @@ -262,7 +261,14 @@ public class MasterSlaveConnectionManager implements ConnectionManager { } if (connection.isActive()) { - nodeConnections.put(addr, connection); + boolean isHostname = NetUtil.createByteArrayFromIpAddressString(addr.getHost()) == null; + RedisURI address = addr; + if (isHostname) { + address = new RedisURI(addr.getScheme() + + "://" + connection.getRedisClient().getAddr().getAddress().getHostAddress() + + ":" + connection.getRedisClient().getAddr().getPort()); + } + nodeConnections.put(address, connection); result.trySuccess(connection); } else { connection.closeAsync();