From 8a3cdd21fe904c31f81f8fd53555677b8c7f5cea Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Thu, 9 Feb 2023 13:34:05 +0300 Subject: [PATCH] Feature - monitorIPChanges setting added for replicated servers mode. #4830 --- .../config/ReplicatedServersConfig.java | 20 +++++++++++++++++++ .../ReplicatedConnectionManager.java | 9 +++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/config/ReplicatedServersConfig.java b/redisson/src/main/java/org/redisson/config/ReplicatedServersConfig.java index 83c7d03cc..4c098161a 100644 --- a/redisson/src/main/java/org/redisson/config/ReplicatedServersConfig.java +++ b/redisson/src/main/java/org/redisson/config/ReplicatedServersConfig.java @@ -43,6 +43,8 @@ public class ReplicatedServersConfig extends BaseMasterSlaveServersConfig + * Default is false + * + * @param monitorIPChanges boolean value + * @return config + */ + public ReplicatedServersConfig setMonitorIPChanges(boolean monitorIPChanges) { + this.monitorIPChanges = monitorIPChanges; + return this; + } + + public boolean isMonitorIPChanges() { + return monitorIPChanges; + } } diff --git a/redisson/src/main/java/org/redisson/connection/ReplicatedConnectionManager.java b/redisson/src/main/java/org/redisson/connection/ReplicatedConnectionManager.java index e5936494e..e4538a3e3 100644 --- a/redisson/src/main/java/org/redisson/connection/ReplicatedConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/ReplicatedConnectionManager.java @@ -166,14 +166,19 @@ public class ReplicatedConnectionManager extends MasterSlaveConnectionManager { private void checkNode(AsyncCountDownLatch latch, RedisURI uri, ReplicatedServersConfig cfg, Set slaveIPs) { CompletionStage connectionFuture = connectToNode(cfg, uri, uri.getHost()); connectionFuture - .thenCompose(c -> resolveIP(uri)) + .thenCompose(c -> { + if (cfg.isMonitorIPChanges()) { + return resolveIP(uri); + } + return CompletableFuture.completedFuture(uri); + }) .thenCompose(ip -> { if (isShuttingDown()) { return CompletableFuture.completedFuture(null); } RedisConnection connection = connectionFuture.toCompletableFuture().join(); - if (!ip.equals(connection.getRedisClient().getAddr())) { + if (cfg.isMonitorIPChanges() && !ip.equals(connection.getRedisClient().getAddr())) { disconnectNode(uri); log.info("Hostname: {} has changed IP from: {} to {}", uri, connection.getRedisClient().getAddr(), ip); return CompletableFuture.>completedFuture(null);