on peer deleted cleanup

This commit is contained in:
crn4
2025-09-17 01:34:38 +02:00
parent 1d6209841e
commit 90557da237

View File

@@ -1435,34 +1435,36 @@ func (b *NetworkMapBuilder) OnPeerDeleted(peerID string) error {
delete(b.validatedPeers, peerID)
routesToDelete := []route.ID{}
for routeID, r := range account.Routes {
if r.Peer == deletedPeerKey || r.PeerID == peerID {
if len(r.PeerGroups) > 0 {
newPeerAssigned := false
for _, groupID := range r.PeerGroups {
if group := account.GetGroup(groupID); group != nil {
for _, candidatePeerID := range group.Peers {
if candidatePeerID != peerID {
if candidatePeer := account.GetPeer(candidatePeerID); candidatePeer != nil {
r.Peer = candidatePeer.Key
r.PeerID = candidatePeerID
newPeerAssigned = true
break
}
}
}
}
if newPeerAssigned {
break
}
}
if !newPeerAssigned {
routesToDelete = append(routesToDelete, routeID)
for routeID, r := range account.Routes {
if r.Peer != deletedPeerKey && r.PeerID != peerID {
continue
}
if len(r.PeerGroups) == 0 {
routesToDelete = append(routesToDelete, routeID)
continue
}
newPeerAssigned := false
for _, groupID := range r.PeerGroups {
candidatePeerIDs := b.cache.groupToPeers[groupID]
for _, candidatePeerID := range candidatePeerIDs {
if candidatePeerID == peerID {
continue
}
if candidatePeer := b.cache.globalPeers[candidatePeerID]; candidatePeer != nil {
r.Peer = candidatePeer.Key
r.PeerID = candidatePeerID
newPeerAssigned = true
break
}
} else {
routesToDelete = append(routesToDelete, routeID)
}
if newPeerAssigned {
break
}
}
if !newPeerAssigned {
routesToDelete = append(routesToDelete, routeID)
}
}
@@ -1536,23 +1538,22 @@ func (b *NetworkMapBuilder) findPeersAffectedByDeletedPeerACL(
continue
}
if slices.Contains(aclView.ConnectedPeerIDs, deletedPeerID) {
if affected[peerID] == nil {
affected[peerID] = &PeerDeletionUpdate{
RemovePeerID: deletedPeerID,
PeerIP: peerIP,
}
if !slices.Contains(aclView.ConnectedPeerIDs, deletedPeerID) {
continue
}
if affected[peerID] == nil {
affected[peerID] = &PeerDeletionUpdate{
RemovePeerID: deletedPeerID,
PeerIP: peerIP,
}
}
for _, ruleID := range aclView.FirewallRuleIDs {
if rule := b.cache.globalRules[ruleID]; rule != nil {
if rule.PeerIP == peerIP {
affected[peerID].RemoveFirewallRuleIDs = append(
affected[peerID].RemoveFirewallRuleIDs,
ruleID,
)
}
}
for _, ruleID := range aclView.FirewallRuleIDs {
if rule := b.cache.globalRules[ruleID]; rule != nil && rule.PeerIP == peerIP {
affected[peerID].RemoveFirewallRuleIDs = append(
affected[peerID].RemoveFirewallRuleIDs,
ruleID,
)
}
}
}