From 969f1ed59a9645eaee4fd76b3529b4b829accc35 Mon Sep 17 00:00:00 2001 From: Bethuel Mmbaga Date: Wed, 9 Jul 2025 10:14:10 +0300 Subject: [PATCH] [management] Remove deleted user peers from groups on user deletion (#4121) Refactors peer deletion to centralize group cleanup logic, ensuring deleted peers are consistently removed from all groups in one place. - Removed redundant group removal code from DefaultAccountManager.DeletePeer - Added group removal logic inside deletePeers to handle both single and multiple peer deletions --- management/server/peer.go | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/management/server/peer.go b/management/server/peer.go index 1dd390dd9..44156e534 100644 --- a/management/server/peer.go +++ b/management/server/peer.go @@ -364,19 +364,6 @@ func (am *DefaultAccountManager) DeletePeer(ctx context.Context, accountID, peer return err } - groups, err := transaction.GetPeerGroups(ctx, store.LockingStrengthUpdate, accountID, peerID) - if err != nil { - return fmt.Errorf("failed to get peer groups: %w", err) - } - - for _, group := range groups { - group.RemovePeer(peerID) - err = transaction.SaveGroup(ctx, store.LockingStrengthUpdate, group) - if err != nil { - return fmt.Errorf("failed to save group: %w", err) - } - } - eventsToStore, err = deletePeers(ctx, am, transaction, accountID, userID, []*nbpeer.Peer{peer}) return err }) @@ -1517,13 +1504,26 @@ func deletePeers(ctx context.Context, am *DefaultAccountManager, transaction sto } dnsDomain := am.GetDNSDomain(settings) + network, err := transaction.GetAccountNetwork(ctx, store.LockingStrengthShare, accountID) + if err != nil { + return nil, err + } + for _, peer := range peers { - if err := am.integratedPeerValidator.PeerDeleted(ctx, accountID, peer.ID); err != nil { - return nil, err + groups, err := transaction.GetPeerGroups(ctx, store.LockingStrengthUpdate, accountID, peer.ID) + if err != nil { + return nil, fmt.Errorf("failed to get peer groups: %w", err) } - network, err := transaction.GetAccountNetwork(ctx, store.LockingStrengthShare, accountID) - if err != nil { + for _, group := range groups { + group.RemovePeer(peer.ID) + err = transaction.SaveGroup(ctx, store.LockingStrengthUpdate, group) + if err != nil { + return nil, fmt.Errorf("failed to save group: %w", err) + } + } + + if err := am.integratedPeerValidator.PeerDeleted(ctx, accountID, peer.ID); err != nil { return nil, err }