From 550ae5558ebbe8f83143862f9f1155e3fd9d96a5 Mon Sep 17 00:00:00 2001 From: pascal Date: Thu, 7 May 2026 16:24:54 +0200 Subject: [PATCH] update after merge --- .../controllers/network_map/controller/controller.go | 6 +++++- management/internals/controllers/network_map/interface.go | 2 +- .../internals/controllers/network_map/interface_mock.go | 8 ++++---- management/server/account.go | 4 +++- management/server/account/manager.go | 2 +- management/server/account/manager_mock.go | 8 ++++---- management/server/mock_server/account_mock.go | 6 +++--- management/server/peer.go | 4 ++-- 8 files changed, 23 insertions(+), 17 deletions(-) diff --git a/management/internals/controllers/network_map/controller/controller.go b/management/internals/controllers/network_map/controller/controller.go index 8ba7c3a49..9ee33692b 100644 --- a/management/internals/controllers/network_map/controller/controller.go +++ b/management/internals/controllers/network_map/controller/controller.go @@ -512,11 +512,15 @@ func (c *Controller) BufferUpdateAccountPeers(ctx context.Context, accountID str } // BufferUpdateAffectedPeers accumulates peer IDs and flushes them after the buffer interval. -func (c *Controller) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string) error { +func (c *Controller) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string, reason types.UpdateReason) error { if len(peerIDs) == 0 { return nil } + if c.accountManagerMetrics != nil { + c.accountManagerMetrics.CountUpdateAccountPeersTriggered(string(reason.Resource), string(reason.Operation)) + } + log.WithContext(ctx).Tracef("buffer updating %d affected peers for account %s from %s", len(peerIDs), accountID, util.GetCallerName()) bufUpd, _ := c.affectedPeerUpdateLocks.LoadOrStore(accountID, &bufferAffectedUpdate{ diff --git a/management/internals/controllers/network_map/interface.go b/management/internals/controllers/network_map/interface.go index 95bed7533..dbdd87708 100644 --- a/management/internals/controllers/network_map/interface.go +++ b/management/internals/controllers/network_map/interface.go @@ -20,7 +20,7 @@ const ( type Controller interface { UpdateAccountPeers(ctx context.Context, accountID string, reason types.UpdateReason) error UpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string) error - BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string) error + BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string, reason types.UpdateReason) error UpdateAccountPeer(ctx context.Context, accountId string, peerId string) error BufferUpdateAccountPeers(ctx context.Context, accountID string, reason types.UpdateReason) error GetValidatedPeerWithMap(ctx context.Context, isRequiresApproval bool, accountID string, p *nbpeer.Peer) (*nbpeer.Peer, *types.NetworkMap, []*posture.Checks, int64, error) diff --git a/management/internals/controllers/network_map/interface_mock.go b/management/internals/controllers/network_map/interface_mock.go index 560a4b42b..a67156719 100644 --- a/management/internals/controllers/network_map/interface_mock.go +++ b/management/internals/controllers/network_map/interface_mock.go @@ -58,17 +58,17 @@ func (mr *MockControllerMockRecorder) BufferUpdateAccountPeers(ctx, accountID, r } // BufferUpdateAffectedPeers mocks base method. -func (m *MockController) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string) error { +func (m *MockController) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string, reason types.UpdateReason) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "BufferUpdateAffectedPeers", ctx, accountID, peerIDs) + ret := m.ctrl.Call(m, "BufferUpdateAffectedPeers", ctx, accountID, peerIDs, reason) ret0, _ := ret[0].(error) return ret0 } // BufferUpdateAffectedPeers indicates an expected call of BufferUpdateAffectedPeers. -func (mr *MockControllerMockRecorder) BufferUpdateAffectedPeers(ctx, accountID, peerIDs any) *gomock.Call { +func (mr *MockControllerMockRecorder) BufferUpdateAffectedPeers(ctx, accountID, peerIDs, reason any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BufferUpdateAffectedPeers", reflect.TypeOf((*MockController)(nil).BufferUpdateAffectedPeers), ctx, accountID, peerIDs) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BufferUpdateAffectedPeers", reflect.TypeOf((*MockController)(nil).BufferUpdateAffectedPeers), ctx, accountID, peerIDs, reason) } // CountStreams mocks base method. diff --git a/management/server/account.go b/management/server/account.go index b2d62bc24..000a043c8 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -2589,7 +2589,9 @@ func (am *DefaultAccountManager) UpdatePeerIPv6(ctx context.Context, accountID, } if updateNetworkMap { - if err := am.networkMapController.OnPeersUpdated(ctx, accountID, []string{peerID}); err != nil { + changedPeerIDs := []string{peerID} + affectedPeerIDs := am.resolveAffectedPeersForPeerChanges(ctx, am.Store, accountID, changedPeerIDs) + if err := am.networkMapController.OnPeersUpdated(ctx, accountID, changedPeerIDs, affectedPeerIDs); err != nil { return fmt.Errorf("notify network map controller: %w", err) } } diff --git a/management/server/account/manager.go b/management/server/account/manager.go index 123dd1829..7832eb652 100644 --- a/management/server/account/manager.go +++ b/management/server/account/manager.go @@ -127,7 +127,7 @@ type Manager interface { DeleteSetupKey(ctx context.Context, accountID, userID, keyID string) error UpdateAccountPeers(ctx context.Context, accountID string, reason types.UpdateReason) UpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string) - BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string) + BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string, reason types.UpdateReason) BufferUpdateAccountPeers(ctx context.Context, accountID string, reason types.UpdateReason) BuildUserInfosForAccount(ctx context.Context, accountID, initiatorUserID string, accountUsers []*types.User) (map[string]*types.UserInfo, error) SyncUserJWTGroups(ctx context.Context, userAuth auth.UserAuth) error diff --git a/management/server/account/manager_mock.go b/management/server/account/manager_mock.go index 3668bd5df..c11252db1 100644 --- a/management/server/account/manager_mock.go +++ b/management/server/account/manager_mock.go @@ -123,15 +123,15 @@ func (mr *MockManagerMockRecorder) BufferUpdateAccountPeers(ctx, accountID, reas } // BufferUpdateAffectedPeers mocks base method. -func (m *MockManager) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string) { +func (m *MockManager) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string, reason types.UpdateReason) { m.ctrl.T.Helper() - m.ctrl.Call(m, "BufferUpdateAffectedPeers", ctx, accountID, peerIDs) + m.ctrl.Call(m, "BufferUpdateAffectedPeers", ctx, accountID, peerIDs, reason) } // BufferUpdateAffectedPeers indicates an expected call of BufferUpdateAffectedPeers. -func (mr *MockManagerMockRecorder) BufferUpdateAffectedPeers(ctx, accountID, peerIDs interface{}) *gomock.Call { +func (mr *MockManagerMockRecorder) BufferUpdateAffectedPeers(ctx, accountID, peerIDs, reason interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BufferUpdateAffectedPeers", reflect.TypeOf((*MockManager)(nil).BufferUpdateAffectedPeers), ctx, accountID, peerIDs) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BufferUpdateAffectedPeers", reflect.TypeOf((*MockManager)(nil).BufferUpdateAffectedPeers), ctx, accountID, peerIDs, reason) } // BuildUserInfosForAccount mocks base method. diff --git a/management/server/mock_server/account_mock.go b/management/server/mock_server/account_mock.go index bbde919a8..8e7ce0f51 100644 --- a/management/server/mock_server/account_mock.go +++ b/management/server/mock_server/account_mock.go @@ -131,7 +131,7 @@ type MockAccountManager struct { AllowSyncFunc func(string, uint64) bool UpdateAccountPeersFunc func(ctx context.Context, accountID string, reason types.UpdateReason) UpdateAffectedPeersFunc func(ctx context.Context, accountID string, peerIDs []string) - BufferUpdateAffectedPeersFunc func(ctx context.Context, accountID string, peerIDs []string) + BufferUpdateAffectedPeersFunc func(ctx context.Context, accountID string, peerIDs []string, reason types.UpdateReason) BufferUpdateAccountPeersFunc func(ctx context.Context, accountID string, reason types.UpdateReason) RecalculateNetworkMapCacheFunc func(ctx context.Context, accountId string) error @@ -215,9 +215,9 @@ func (am *MockAccountManager) UpdateAffectedPeers(ctx context.Context, accountID } } -func (am *MockAccountManager) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string) { +func (am *MockAccountManager) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string, reason types.UpdateReason) { if am.BufferUpdateAffectedPeersFunc != nil { - am.BufferUpdateAffectedPeersFunc(ctx, accountID, peerIDs) + am.BufferUpdateAffectedPeersFunc(ctx, accountID, peerIDs, reason) } } diff --git a/management/server/peer.go b/management/server/peer.go index 65d433a88..08d5b6deb 100644 --- a/management/server/peer.go +++ b/management/server/peer.go @@ -1328,8 +1328,8 @@ func (am *DefaultAccountManager) resolvePeerIDs(ctx context.Context, s store.Sto } // BufferUpdateAffectedPeers accumulates peer IDs and flushes them after the buffer interval. -func (am *DefaultAccountManager) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string) { - _ = am.networkMapController.BufferUpdateAffectedPeers(ctx, accountID, peerIDs) +func (am *DefaultAccountManager) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string, reason types.UpdateReason) { + _ = am.networkMapController.BufferUpdateAffectedPeers(ctx, accountID, peerIDs, reason) } // resolveAffectedPeersForPeerChanges resolves changed peer IDs into the full set of affected peer IDs.