Fixed - re-added master node isn't updated in Cluster topology. #5972

pull/6041/head
Nikita Koksharov 7 months ago
parent 6967dfa7a9
commit a4bdaa5c7d

@ -345,8 +345,7 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager {
return f.thenCompose(masterClient -> {
for (Integer slot : partition.getSlots()) {
addEntry(slot, entry);
lastPartitions.put(slot, partition);
partition.incReference();
addPartition(slot, partition);
}
if (partition.getSlotsAmount() > 0) {
lastUri2Partition.put(partition.getMasterAddress(), partition);
@ -374,6 +373,15 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager {
});
}
private void addPartition(Integer slot, ClusterPartition partition) {
partition.incReference();
ClusterPartition prevPartiton = lastPartitions.put(slot, partition);
if (prevPartiton != null
&& prevPartiton.decReference() == 0) {
lastUri2Partition.remove(prevPartiton.getMasterAddress());
}
}
private void scheduleClusterChangeCheck(ClusterServersConfig cfg) {
monitorFuture = serviceManager.newTimeout(t -> {
if (configEndpointHostName != null) {
@ -731,8 +739,7 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager {
if (entry != null) {
addEntry(slot, entry);
lastPartitions.put(slot, clusterPartition);
clusterPartition.incReference();
addPartition(slot, clusterPartition);
lastUri2Partition.put(clusterPartition.getMasterAddress(), clusterPartition);
addedSlots++;
}
@ -765,8 +772,7 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager {
addedSlots.stream().forEach(slot -> {
addEntry(slot, entry);
lastPartitions.put(slot, currentPartition);
currentPartition.incReference();
addPartition(slot, currentPartition);
changedSlots.add(slot);
});
if (!addedSlots.isEmpty()) {

Loading…
Cancel
Save