on peer deleted cleanup

This commit is contained in:
crn4
2025-09-17 01:34:38 +02:00
parent 1d6209841e
commit 90557da237
+41 -40
View File
@@ -1435,34 +1435,36 @@ func (b *NetworkMapBuilder) OnPeerDeleted(peerID string) error {
delete(b.validatedPeers, peerID) delete(b.validatedPeers, peerID)
routesToDelete := []route.ID{} 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 { for routeID, r := range account.Routes {
routesToDelete = append(routesToDelete, routeID) 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 continue
} }
if slices.Contains(aclView.ConnectedPeerIDs, deletedPeerID) { if !slices.Contains(aclView.ConnectedPeerIDs, deletedPeerID) {
if affected[peerID] == nil { continue
affected[peerID] = &PeerDeletionUpdate{ }
RemovePeerID: deletedPeerID, if affected[peerID] == nil {
PeerIP: peerIP, affected[peerID] = &PeerDeletionUpdate{
} RemovePeerID: deletedPeerID,
PeerIP: peerIP,
} }
}
for _, ruleID := range aclView.FirewallRuleIDs { for _, ruleID := range aclView.FirewallRuleIDs {
if rule := b.cache.globalRules[ruleID]; rule != nil { if rule := b.cache.globalRules[ruleID]; rule != nil && rule.PeerIP == peerIP {
if rule.PeerIP == peerIP { affected[peerID].RemoveFirewallRuleIDs = append(
affected[peerID].RemoveFirewallRuleIDs = append( affected[peerID].RemoveFirewallRuleIDs,
affected[peerID].RemoveFirewallRuleIDs, ruleID,
ruleID, )
)
}
}
} }
} }
} }