Fixed - master node shouldn't be initialized as slave in single mode. #4011

pull/4031/head
Nikita Koksharov 3 years ago
parent f055696473
commit 715e4db0c5

@ -311,7 +311,12 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager {
}
if (!config.checkSkipSlavesInit()) {
List<RFuture<Void>> fs = entry.initSlaveBalancer(partition.getFailedSlaveAddresses(), masterClient, configEndpointHostName);
List<RFuture<Void>> fs = entry.initSlaveBalancer(partition.getFailedSlaveAddresses(), configEndpointHostName);
if (fs.isEmpty()) {
result.trySuccess(null);
return;
}
AtomicInteger counter = new AtomicInteger(fs.size());
AtomicInteger errorCounter = new AtomicInteger(fs.size());
for (RFuture<Void> future : fs) {

@ -337,7 +337,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
masterFuture.syncUninterruptibly();
if (!config.checkSkipSlavesInit()) {
List<RFuture<Void>> fs = masterSlaveEntry.initSlaveBalancer(getDisconnectedNodes(), masterFuture.getNow());
List<RFuture<Void>> fs = masterSlaveEntry.initSlaveBalancer(getDisconnectedNodes());
for (RFuture<Void> future : fs) {
future.syncUninterruptibly();
}

@ -79,21 +79,15 @@ public class MasterSlaveEntry {
return config;
}
public List<RFuture<Void>> initSlaveBalancer(Collection<RedisURI> disconnectedNodes, RedisClient master) {
return initSlaveBalancer(disconnectedNodes, master, null);
public List<RFuture<Void>> initSlaveBalancer(Collection<RedisURI> disconnectedNodes) {
return initSlaveBalancer(disconnectedNodes, null);
}
public List<RFuture<Void>> initSlaveBalancer(Collection<RedisURI> disconnectedNodes, RedisClient master, String slaveSSLHostname) {
boolean freezeMasterAsSlave = !config.getSlaveAddresses().isEmpty()
&& !config.checkSkipSlavesInit()
&& disconnectedNodes.size() < config.getSlaveAddresses().size();
List<RFuture<Void>> result = new LinkedList<RFuture<Void>>();
RFuture<Void> f = addSlave(master.getAddr(), master.getConfig().getAddress(), freezeMasterAsSlave, NodeType.MASTER, master.getConfig().getSslHostname());
result.add(f);
public List<RFuture<Void>> initSlaveBalancer(Collection<RedisURI> disconnectedNodes, String slaveSSLHostname) {
List<RFuture<Void>> result = new ArrayList<>(config.getSlaveAddresses().size());
for (String address : config.getSlaveAddresses()) {
RedisURI uri = new RedisURI(address);
f = addSlave(uri, disconnectedNodes.contains(uri), NodeType.SLAVE, slaveSSLHostname);
RFuture<Void> f = addSlave(uri, disconnectedNodes.contains(uri), NodeType.SLAVE, slaveSSLHostname);
result.add(f);
}
return result;
@ -139,7 +133,7 @@ public class MasterSlaveEntry {
List<CompletableFuture<Void>> futures = new ArrayList<>();
if (!config.checkSkipSlavesInit() && !slaveBalancer.contains(client.getAddr())) {
RFuture<Void> masterAsSlaveFuture = addSlave(client.getAddr(), client.getConfig().getAddress(),
false, NodeType.MASTER, client.getConfig().getSslHostname());
true, NodeType.MASTER, client.getConfig().getSslHostname());
futures.add(masterAsSlaveFuture.toCompletableFuture());
}
@ -477,10 +471,10 @@ public class MasterSlaveEntry {
// freeze in slaveBalancer
slaveDown(oldMaster.getClient().getAddr(), FreezeReason.MANAGER);
// more than one slave available, so master can be removed from slaves
// check if at least one slave is available, use master as slave if false
if (!config.checkSkipSlavesInit()
&& slaveBalancer.getAvailableClients() > 1) {
slaveDown(newMasterClient.getAddr(), FreezeReason.SYSTEM);
&& slaveBalancer.getAvailableClients() == 0) {
slaveUp(newMasterClient.getAddr(), FreezeReason.SYSTEM);
}
oldMaster.shutdownAsync();
log.info("master {} has changed to {}", oldMaster.getClient().getAddr(), masterEntry.getClient().getAddr());

Loading…
Cancel
Save