From 0513109c35d5673d5d79d46a6ac22204d7036e8a Mon Sep 17 00:00:00 2001 From: pascal Date: Thu, 6 Aug 2026 12:31:26 +0200 Subject: [PATCH] improve looping on connected peers filtering --- .../network_map/controller/controller.go | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/management/internals/controllers/network_map/controller/controller.go b/management/internals/controllers/network_map/controller/controller.go index dac3f6990..bee550f86 100644 --- a/management/internals/controllers/network_map/controller/controller.go +++ b/management/internals/controllers/network_map/controller/controller.go @@ -321,12 +321,12 @@ func (c *Controller) sendUpdateAccountPeersFromData(ctx context.Context, account // sendUpdateForAffectedPeersFromData is the account-free variant of // sendUpdateForAffectedPeers. func (c *Controller) sendUpdateForAffectedPeersFromData(ctx context.Context, accountID string, peerIDs []string, nmData *networkmap.NetworkMapData) error { - affected := make(map[string]struct{}, len(peerIDs)) - for _, id := range peerIDs { - affected[id] = struct{}{} + if len(peerIDs) == 0 { + log.WithContext(ctx).Tracef("sendUpdateForAffectedPeersFromData: no affected peers") + return nil } - peersToUpdate := c.connectedPeersFromData(nmData, affected) + peersToUpdate := c.connectedPeersFromData(nmData, peerIDs) if len(peersToUpdate) == 0 { log.WithContext(ctx).Tracef("sendUpdateForAffectedPeersFromData: no peers to update (affected peers not found in data or no channels)") return nil @@ -337,15 +337,27 @@ func (c *Controller) sendUpdateForAffectedPeersFromData(ctx context.Context, acc return c.sendUpdatesFromData(ctx, accountID, nmData, peersToUpdate, nil) } -func (c *Controller) connectedPeersFromData(nmData *networkmap.NetworkMapData, affected map[string]struct{}) []*nmdata.Peer { - var result []*nmdata.Peer - for _, peer := range nmData.Peers { - if affected != nil { - if _, ok := affected[peer.ID]; !ok { - continue +// connectedPeersFromData returns the peers with an open update channel. An +// empty affected list means all peers; a non-empty list restricts the result +// to those peer IDs. +func (c *Controller) connectedPeersFromData(nmData *networkmap.NetworkMapData, affected []string) []*nmdata.Peer { + if len(affected) == 0 { + result := make([]*nmdata.Peer, 0, len(nmData.Peers)) + for _, peer := range nmData.Peers { + if c.peersUpdateManager.HasChannel(peer.ID) { + result = append(result, peer) } } - if c.peersUpdateManager.HasChannel(peer.ID) { + return result + } + + result := make([]*nmdata.Peer, 0, len(affected)) + for _, peerID := range affected { + peer := nmData.Peers[peerID] + if peer == nil { + continue + } + if c.peersUpdateManager.HasChannel(peerID) { result = append(result, peer) } }