From ea64de6b8ea66386daf88cbc82ad8a71db05481d Mon Sep 17 00:00:00 2001 From: markusdlugi Date: Wed, 29 Jan 2020 12:55:06 +0100 Subject: [PATCH] Perform Sentinel DNS check when all connections fail Signed-off-by: markusdlugi --- .../connection/SentinelConnectionManager.java | 53 +++++++++++-------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java index 8c5b4d5e1..5f16f67ca 100755 --- a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java @@ -256,32 +256,38 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { } } }; - - for (RedisURI host : sentinelHosts) { - Future> allNodes = sentinelResolver.resolveAll(InetSocketAddress.createUnresolved(host.getHost(), host.getPort())); - allNodes.addListener(new FutureListener>() { - @Override - public void operationComplete(Future> future) throws Exception { - if (!future.isSuccess()) { - log.error("Unable to resolve " + host.getHost(), future.cause()); - return; - } - - Set newUris = future.getNow().stream() - .map(addr -> toURI(addr.getAddress().getHostAddress(), "" + addr.getPort())) - .collect(Collectors.toSet()); - - for (RedisURI uri : newUris) { - if (!sentinels.containsKey(uri)) { - registerSentinel(uri, getConfig()); - } - } + + performSentinelDNSCheck(commonListener); + } + }, config.getDnsMonitoringInterval(), TimeUnit.MILLISECONDS); + } + + private void performSentinelDNSCheck(FutureListener> commonListener) { + for (RedisURI host : sentinelHosts) { + Future> allNodes = sentinelResolver.resolveAll(InetSocketAddress.createUnresolved(host.getHost(), host.getPort())); + allNodes.addListener(new FutureListener>() { + @Override + public void operationComplete(Future> future) throws Exception { + if (!future.isSuccess()) { + log.error("Unable to resolve " + host.getHost(), future.cause()); + return; + } + + Set newUris = future.getNow().stream() + .map(addr -> toURI(addr.getAddress().getHostAddress(), "" + addr.getPort())) + .collect(Collectors.toSet()); + + for (RedisURI uri : newUris) { + if (!sentinels.containsKey(uri)) { + registerSentinel(uri, getConfig()); } - }); - allNodes.addListener(commonListener); + } } + }); + if (commonListener != null) { + allNodes.addListener(commonListener); } - }, config.getDnsMonitoringInterval(), TimeUnit.MILLISECONDS); + } } private void scheduleChangeCheck(SentinelServersConfig cfg, Iterator iterator) { @@ -306,6 +312,7 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { if (lastException.get() != null) { log.error("Can't update cluster state", lastException.get()); } + performSentinelDNSCheck(null); scheduleChangeCheck(cfg, null); return; }