Feature - monitorIPChanges setting added for replicated servers mode. #4830

pull/4853/head
Nikita Koksharov 2 years ago
parent 7223c2742a
commit 8a3cdd21fe

@ -43,6 +43,8 @@ public class ReplicatedServersConfig extends BaseMasterSlaveServersConfig<Replic
*/ */
private int database = 0; private int database = 0;
private boolean monitorIPChanges = false;
public ReplicatedServersConfig() { public ReplicatedServersConfig() {
} }
@ -51,6 +53,7 @@ public class ReplicatedServersConfig extends BaseMasterSlaveServersConfig<Replic
setNodeAddresses(config.getNodeAddresses()); setNodeAddresses(config.getNodeAddresses());
setScanInterval(config.getScanInterval()); setScanInterval(config.getScanInterval());
setDatabase(config.getDatabase()); setDatabase(config.getDatabase());
setMonitorIPChanges(config.isMonitorIPChanges());
} }
/** /**
@ -102,4 +105,21 @@ public class ReplicatedServersConfig extends BaseMasterSlaveServersConfig<Replic
return database; return database;
} }
/**
* Check each Redis hostname defined in configuration for
* IP address changes during scan process.
* <p>
* Default is <code>false</code>
*
* @param monitorIPChanges boolean value
* @return config
*/
public ReplicatedServersConfig setMonitorIPChanges(boolean monitorIPChanges) {
this.monitorIPChanges = monitorIPChanges;
return this;
}
public boolean isMonitorIPChanges() {
return monitorIPChanges;
}
} }

@ -166,14 +166,19 @@ public class ReplicatedConnectionManager extends MasterSlaveConnectionManager {
private void checkNode(AsyncCountDownLatch latch, RedisURI uri, ReplicatedServersConfig cfg, Set<InetSocketAddress> slaveIPs) { private void checkNode(AsyncCountDownLatch latch, RedisURI uri, ReplicatedServersConfig cfg, Set<InetSocketAddress> slaveIPs) {
CompletionStage<RedisConnection> connectionFuture = connectToNode(cfg, uri, uri.getHost()); CompletionStage<RedisConnection> connectionFuture = connectToNode(cfg, uri, uri.getHost());
connectionFuture connectionFuture
.thenCompose(c -> resolveIP(uri)) .thenCompose(c -> {
if (cfg.isMonitorIPChanges()) {
return resolveIP(uri);
}
return CompletableFuture.completedFuture(uri);
})
.thenCompose(ip -> { .thenCompose(ip -> {
if (isShuttingDown()) { if (isShuttingDown()) {
return CompletableFuture.completedFuture(null); return CompletableFuture.completedFuture(null);
} }
RedisConnection connection = connectionFuture.toCompletableFuture().join(); RedisConnection connection = connectionFuture.toCompletableFuture().join();
if (!ip.equals(connection.getRedisClient().getAddr())) { if (cfg.isMonitorIPChanges() && !ip.equals(connection.getRedisClient().getAddr())) {
disconnectNode(uri); disconnectNode(uri);
log.info("Hostname: {} has changed IP from: {} to {}", uri, connection.getRedisClient().getAddr(), ip); log.info("Hostname: {} has changed IP from: {} to {}", uri, connection.getRedisClient().getAddr(), ip);
return CompletableFuture.<Map<String, String>>completedFuture(null); return CompletableFuture.<Map<String, String>>completedFuture(null);

Loading…
Cancel
Save