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 boolean monitorIPChanges = false;
public ReplicatedServersConfig() {
}
@ -51,6 +53,7 @@ public class ReplicatedServersConfig extends BaseMasterSlaveServersConfig<Replic
setNodeAddresses(config.getNodeAddresses());
setScanInterval(config.getScanInterval());
setDatabase(config.getDatabase());
setMonitorIPChanges(config.isMonitorIPChanges());
}
/**
@ -102,4 +105,21 @@ public class ReplicatedServersConfig extends BaseMasterSlaveServersConfig<Replic
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) {
CompletionStage<RedisConnection> 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.<Map<String, String>>completedFuture(null);

Loading…
Cancel
Save