[bugfix](fe) fix add follower failed due to conflict socket . (#10429)

This commit is contained in:
Lei Zhang
2022-07-01 11:12:36 +08:00
committed by GitHub
parent 2708289816
commit d0b757c03a
2 changed files with 22 additions and 1 deletions

View File

@ -2464,10 +2464,12 @@ public class Catalog {
fe = new Frontend(role, nodeName, host, editLogPort);
frontends.put(nodeName, fe);
BDBHA bdbha = (BDBHA) haProtocol;
if (role == FrontendNodeType.FOLLOWER || role == FrontendNodeType.REPLICA) {
((BDBHA) getHaProtocol()).addHelperSocket(host, editLogPort);
bdbha.addHelperSocket(host, editLogPort);
helperNodes.add(Pair.create(host, editLogPort));
}
bdbha.removeConflictNodeIfExist(host, editLogPort);
editLog.logAddFrontend(fe);
} finally {
unlock();

View File

@ -221,4 +221,23 @@ public class BDBHA implements HAProtocol {
LOG.info("add {}:{} to helper sockets", ip, port);
}
}
public void removeConflictNodeIfExist(String host, int port) {
ReplicationGroupAdmin replicationGroupAdmin = environment.getReplicationGroupAdmin();
if (replicationGroupAdmin == null) {
return;
}
List<String> conflictNodes = Lists.newArrayList();
Set<ReplicationNode> replicationNodes = replicationGroupAdmin.getGroup().getElectableNodes();
for (ReplicationNode replicationNode : replicationNodes) {
if (replicationNode.getHostName().equals(host) && replicationNode.getPort() == port) {
conflictNodes.add(replicationNode.getName());
}
}
for (String conflictNode : conflictNodes) {
removeElectableNode(conflictNode);
}
}
}