diff --git a/management/server/mock_server/account_mock.go b/management/server/mock_server/account_mock.go index 8a63397ae..211097b63 100644 --- a/management/server/mock_server/account_mock.go +++ b/management/server/mock_server/account_mock.go @@ -984,5 +984,5 @@ func (am *MockAccountManager) RecalculateNetworkMapCache(ctx context.Context, ac if am.RecalculateNetworkMapCacheFunc != nil { return am.RecalculateNetworkMapCacheFunc(ctx, accountID) } - return status.Errorf(codes.Unimplemented, "method RecalculateNetworkMapCache is not implemented") + return nil } diff --git a/management/server/networkmap.go b/management/server/networkmap.go index 0ce1ec652..ff8b3f1b0 100644 --- a/management/server/networkmap.go +++ b/management/server/networkmap.go @@ -26,7 +26,7 @@ func (am *DefaultAccountManager) getPeerNetworkMapExp( metrics *telemetry.AccountManagerMetrics, ) *types.NetworkMap { am.enrichAccountFromHolder(account) - return account.GetPeerNetworkMapExp(ctx, peerId, customZone, validatedPeers, account.GetResourcePoliciesMap(), account.GetResourceRoutersMap(), metrics) + return account.GetPeerNetworkMapExp(ctx, peerId, customZone, validatedPeers, metrics) } func (am *DefaultAccountManager) onPeerAddedUpdNetworkMapCache(account *types.Account, peerId string) error { diff --git a/management/server/types/networkmap.go b/management/server/types/networkmap.go index 46fdb94d3..c560ecf1b 100644 --- a/management/server/types/networkmap.go +++ b/management/server/types/networkmap.go @@ -858,12 +858,10 @@ func (a *Account) GetPeerNetworkMapExp( peerID string, peersCustomZone nbdns.CustomZone, validatedPeers map[string]struct{}, - resourcePolicies map[string][]*Policy, - routers map[string]map[string]*routerTypes.NetworkRouter, metrics *telemetry.AccountManagerMetrics, ) *NetworkMap { a.initNetworkMapBuilder(validatedPeers) - return a.NetworkMapCache.GetPeerNetworkMap(ctx, peerID, peersCustomZone, validatedPeers, resourcePolicies, routers, metrics) + return a.NetworkMapCache.GetPeerNetworkMap(ctx, peerID, peersCustomZone, validatedPeers, metrics) } func (a *Account) OnPeerAddedUpdNetworkMapCache(peerId string) error { diff --git a/management/server/types/networkmap_golden_test.go b/management/server/types/networkmap_golden_test.go index 3be041e4f..37ab4434e 100644 --- a/management/server/types/networkmap_golden_test.go +++ b/management/server/types/networkmap_golden_test.go @@ -105,7 +105,7 @@ func TestGetPeerNetworkMap_Golden_New(t *testing.T) { } builder := types.NewNetworkMapBuilder(account, validatedPeersMap) - networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil, nil, nil) + networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil) normalizeAndSortNetworkMap(networkMap) @@ -150,7 +150,7 @@ func BenchmarkGetPeerNetworkMap(b *testing.B) { for range b.N { builder := types.NewNetworkMapBuilder(account, validatedPeersMap) for _, peerID := range peerIDs { - _ = builder.GetPeerNetworkMap(ctx, peerID, dns.CustomZone{}, validatedPeersMap, nil, nil, nil) + _ = builder.GetPeerNetworkMap(ctx, peerID, dns.CustomZone{}, validatedPeersMap, nil) } } }) @@ -269,7 +269,7 @@ func TestGetPeerNetworkMap_Golden_New_WithOnPeerAdded(t *testing.T) { err := builder.OnPeerAddedIncremental(newPeerID) require.NoError(t, err, "error adding peer to cache") - networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil, nil, nil) + networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil) normalizeAndSortNetworkMap(networkMap) @@ -329,7 +329,7 @@ func BenchmarkGetPeerNetworkMap_AfterPeerAdded(b *testing.B) { for i := 0; i < b.N; i++ { _ = builder.OnPeerAddedIncremental(newPeerID) for _, testingPeerID := range peerIDs { - _ = builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil, nil, nil) + _ = builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil) } } }) @@ -475,7 +475,7 @@ func TestGetPeerNetworkMap_Golden_New_WithOnPeerAddedRouter(t *testing.T) { err := builder.OnPeerAddedIncremental(newRouterID) require.NoError(t, err, "error adding router to cache") - networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil, nil, nil) + networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil) normalizeAndSortNetworkMap(networkMap) @@ -559,7 +559,7 @@ func BenchmarkGetPeerNetworkMap_AfterRouterPeerAdded(b *testing.B) { for i := 0; i < b.N; i++ { _ = builder.OnPeerAddedIncremental(newRouterID) for _, testingPeerID := range peerIDs { - _ = builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil, nil, nil) + _ = builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil) } } }) @@ -664,7 +664,7 @@ func TestGetPeerNetworkMap_Golden_New_WithOnPeerDeleted(t *testing.T) { err := builder.OnPeerDeleted(deletedPeerID) require.NoError(t, err, "error deleting peer from cache") - networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil, nil, nil) + networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil) normalizeAndSortNetworkMap(networkMap) @@ -796,7 +796,7 @@ func TestGetPeerNetworkMap_Golden_New_WithDeletedRouterPeer(t *testing.T) { err := builder.OnPeerDeleted(deletedRouterID) require.NoError(t, err, "error deleting routing peer from cache") - networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil, nil, nil) + networkMap := builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil) normalizeAndSortNetworkMap(networkMap) @@ -856,7 +856,7 @@ func BenchmarkGetPeerNetworkMap_AfterPeerDeleted(b *testing.B) { for i := 0; i < b.N; i++ { _ = builder.OnPeerDeleted(deletedPeerID) for _, testingPeerID := range peerIDs { - _ = builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil, nil, nil) + _ = builder.GetPeerNetworkMap(ctx, testingPeerID, dns.CustomZone{}, validatedPeersMap, nil) } } }) diff --git a/management/server/types/networkmapbuilder.go b/management/server/types/networkmapbuilder.go index ee24d1705..103fb6efd 100644 --- a/management/server/types/networkmapbuilder.go +++ b/management/server/types/networkmapbuilder.go @@ -35,6 +35,9 @@ type NetworkMapCache struct { peerRoutes map[string]*PeerRoutesView peerDNS map[string]*nbdns.Config + resourceRouters map[string]map[string]*routerTypes.NetworkRouter + resourcePolicies map[string][]*Policy + mu sync.RWMutex } @@ -88,6 +91,11 @@ func (b *NetworkMapBuilder) initialBuild(account *Account) { b.buildGlobalIndexes(account) + resourceRouters := account.GetResourceRoutersMap() + resourcePolicies := account.GetResourcePoliciesMap() + b.cache.resourceRouters = resourceRouters + b.cache.resourcePolicies = resourcePolicies + for peerID := range account.Peers { b.buildPeerACLView(account, peerID) b.buildPeerRoutesView(account, peerID) @@ -151,11 +159,10 @@ func (b *NetworkMapBuilder) buildPeerACLView(account *Account, peerID string) { if peer == nil { return } - + resourcePolicies := b.cache.resourcePolicies + resourceRouters := b.cache.resourceRouters allPotentialPeers, firewallRules := account.GetPeerConnectionResources(ctx, peer, b.validatedPeers) - resourceRouters := account.GetResourceRoutersMap() - resourcePolicies := account.GetResourcePoliciesMap() isRouter, networkResourcesRoutes, sourcePeers := account.GetNetworkResourcesRoutesToSync(ctx, peerID, resourcePolicies, resourceRouters) var emptyExpiredPeers []*nbpeer.Peer @@ -192,6 +199,8 @@ func (b *NetworkMapBuilder) buildPeerRoutesView(account *Account, peerID string) if peer == nil { return } + resourcePolicies := b.cache.resourcePolicies + resourceRouters := b.cache.resourceRouters view := &PeerRoutesView{ OwnRouteIDs: make([]route.ID, 0), @@ -239,8 +248,6 @@ func (b *NetworkMapBuilder) buildPeerRoutesView(account *Account, peerID string) } } - resourceRouters := account.GetResourceRoutersMap() - resourcePolicies := account.GetResourcePoliciesMap() _, networkResourcesRoutes, _ := account.GetNetworkResourcesRoutesToSync(ctx, peerID, resourcePolicies, resourceRouters) for _, rt := range networkResourcesRoutes { @@ -289,8 +296,6 @@ func (b *NetworkMapBuilder) GetPeerNetworkMap( peerID string, peersCustomZone nbdns.CustomZone, validatedPeers map[string]struct{}, - resourcePolicies map[string][]*Policy, - routers map[string]map[string]*routerTypes.NetworkRouter, metrics *telemetry.AccountManagerMetrics, ) *NetworkMap { start := time.Now() @@ -710,13 +715,12 @@ func (b *NetworkMapBuilder) calculateNetworkResourceFirewallUpdates( peerGroups []string, updates map[string]*PeerUpdateDelta, ) { - resourcePolicies := account.GetResourcePoliciesMap() - routers := account.GetResourceRoutersMap() - for _, resource := range account.NetworkResources { if !resource.Enabled { continue } + resourcePolicies := b.cache.resourcePolicies + resourceRouters := b.cache.resourceRouters policies := resourcePolicies[resource.ID] peerHasAccess := false @@ -745,7 +749,7 @@ func (b *NetworkMapBuilder) calculateNetworkResourceFirewallUpdates( continue } - networkRouters := routers[resource.NetworkID] + networkRouters := resourceRouters[resource.NetworkID] for routerPeerID, router := range networkRouters { if !router.Enabled || routerPeerID == newPeerID { continue