buildPeerRoutesView optimized

This commit is contained in:
crn4
2025-09-16 14:03:23 +02:00
parent 6082c7cdcb
commit 5a9aa55121
2 changed files with 224 additions and 106 deletions
@@ -288,6 +288,7 @@ func TestGetPeerNetworkMap_Golden_New_WithOnPeerAdded(t *testing.T) {
require.JSONEq(t, string(expectedJSON), string(jsonData), "network map from NEW builder with OnPeerAdded does not match golden file") require.JSONEq(t, string(expectedJSON), string(jsonData), "network map from NEW builder with OnPeerAdded does not match golden file")
} }
func BenchmarkGetPeerNetworkMap_AfterPeerAdded(b *testing.B) { func BenchmarkGetPeerNetworkMap_AfterPeerAdded(b *testing.B) {
account := createTestAccountWithEntities() account := createTestAccountWithEntities()
ctx := context.Background() ctx := context.Background()
+223 -106
View File
@@ -22,6 +22,7 @@ import (
) )
type NetworkMapCache struct { type NetworkMapCache struct {
// globalAccountRoutes map[route.ID]*route.Route
globalRoutes map[route.ID]*route.Route globalRoutes map[route.ID]*route.Route
globalRules map[string]*FirewallRule //ruleId globalRules map[string]*FirewallRule //ruleId
globalRouteRules map[string]*RouteFirewallRule //ruleId globalRouteRules map[string]*RouteFirewallRule //ruleId
@@ -31,6 +32,7 @@ type NetworkMapCache struct {
peerToGroups map[string][]string peerToGroups map[string][]string
policyToRules map[string][]*PolicyRule //policyId policyToRules map[string][]*PolicyRule //policyId
groupToPolicies map[string][]*Policy groupToPolicies map[string][]*Policy
groupToRoutes map[string][]*route.Route
peerACLs map[string]*PeerACLView peerACLs map[string]*PeerACLView
peerRoutes map[string]*PeerRoutesView peerRoutes map[string]*PeerRoutesView
@@ -39,6 +41,8 @@ type NetworkMapCache struct {
resourceRouters map[string]map[string]*routerTypes.NetworkRouter resourceRouters map[string]map[string]*routerTypes.NetworkRouter
resourcePolicies map[string][]*Policy resourcePolicies map[string][]*Policy
globalResources map[string]*resourceTypes.NetworkResource // resourceId
mu sync.RWMutex mu sync.RWMutex
} }
@@ -62,6 +66,7 @@ type NetworkMapBuilder struct {
func NewNetworkMapBuilder(account *Account, validatedPeers map[string]struct{}) *NetworkMapBuilder { func NewNetworkMapBuilder(account *Account, validatedPeers map[string]struct{}) *NetworkMapBuilder {
builder := &NetworkMapBuilder{ builder := &NetworkMapBuilder{
cache: &NetworkMapCache{ cache: &NetworkMapCache{
// globalAccountRoutes: make(map[route.ID]*route.Route),
globalRoutes: make(map[route.ID]*route.Route), globalRoutes: make(map[route.ID]*route.Route),
globalRules: make(map[string]*FirewallRule), globalRules: make(map[string]*FirewallRule),
globalRouteRules: make(map[string]*RouteFirewallRule), globalRouteRules: make(map[string]*RouteFirewallRule),
@@ -70,9 +75,11 @@ func NewNetworkMapBuilder(account *Account, validatedPeers map[string]struct{})
peerToGroups: make(map[string][]string), peerToGroups: make(map[string][]string),
policyToRules: make(map[string][]*PolicyRule), policyToRules: make(map[string][]*PolicyRule),
groupToPolicies: make(map[string][]*Policy), groupToPolicies: make(map[string][]*Policy),
groupToRoutes: make(map[string][]*route.Route),
peerACLs: make(map[string]*PeerACLView), peerACLs: make(map[string]*PeerACLView),
peerRoutes: make(map[string]*PeerRoutesView), peerRoutes: make(map[string]*PeerRoutesView),
peerDNS: make(map[string]*nbdns.Config), peerDNS: make(map[string]*nbdns.Config),
globalResources: make(map[string]*resourceTypes.NetworkResource),
}, },
validatedPeers: make(map[string]struct{}), validatedPeers: make(map[string]struct{}),
} }
@@ -112,6 +119,12 @@ func (b *NetworkMapBuilder) buildGlobalIndexes(account *Account) {
clear(b.cache.peerToGroups) clear(b.cache.peerToGroups)
clear(b.cache.policyToRules) clear(b.cache.policyToRules)
clear(b.cache.groupToPolicies) clear(b.cache.groupToPolicies)
// clear(b.cache.globalAccountRoutes)
clear(b.cache.globalRoutes)
clear(b.cache.globalRules)
clear(b.cache.globalRouteRules)
clear(b.cache.globalResources)
clear(b.cache.groupToRoutes)
maps.Copy(b.cache.globalPeers, account.Peers) maps.Copy(b.cache.globalPeers, account.Peers)
@@ -150,64 +163,38 @@ func (b *NetworkMapBuilder) buildGlobalIndexes(account *Account) {
b.cache.groupToPolicies[groupID] = append(b.cache.groupToPolicies[groupID], policy) b.cache.groupToPolicies[groupID] = append(b.cache.groupToPolicies[groupID], policy)
} }
} }
}
func (b *NetworkMapBuilder) buildPeerACLViewOld(account *Account, peerID string) { for _, resource := range account.NetworkResources {
ctx := context.Background() if !resource.Enabled {
peer := account.GetPeer(peerID) continue
if peer == nil { }
return b.cache.globalResources[resource.ID] = resource
}
resourcePolicies := b.cache.resourcePolicies
resourceRouters := b.cache.resourceRouters
allPotentialPeers, firewallRules := account.GetPeerConnectionResources(ctx, peer, b.validatedPeers)
isRouter, networkResourcesRoutes, sourcePeers := account.GetNetworkResourcesRoutesToSync(ctx, peerID, resourcePolicies, resourceRouters)
var emptyExpiredPeers []*nbpeer.Peer
finalAllPeers := account.addNetworksRoutingPeers(
networkResourcesRoutes,
peer,
allPotentialPeers,
emptyExpiredPeers,
isRouter,
sourcePeers,
)
view := &PeerACLView{
ConnectedPeerIDs: make([]string, 0, len(finalAllPeers)),
FirewallRuleIDs: make([]string, 0, len(firewallRules)),
} }
for _, p := range finalAllPeers { // maps.Copy(b.cache.globalAccountRoutes, account.Routes)
view.ConnectedPeerIDs = append(view.ConnectedPeerIDs, p.ID)
}
for _, rule := range firewallRules { for _, r := range account.Routes {
ruleID := b.generateFirewallRuleID(rule) if !r.Enabled {
view.FirewallRuleIDs = append(view.FirewallRuleIDs, ruleID) continue
b.cache.globalRules[ruleID] = rule }
for _, groupID := range r.Groups {
b.cache.groupToRoutes[groupID] = append(b.cache.groupToRoutes[groupID], r)
}
} }
b.cache.peerACLs[peerID] = view
} }
func (b *NetworkMapBuilder) buildPeerACLView(account *Account, peerID string) { func (b *NetworkMapBuilder) buildPeerACLView(account *Account, peerID string) {
ctx := context.Background()
peer := account.GetPeer(peerID) peer := account.GetPeer(peerID)
if peer == nil { if peer == nil {
return return
} }
resourcePolicies := b.cache.resourcePolicies
resourceRouters := b.cache.resourceRouters
allPotentialPeers, firewallRules := b.getPeerConnectionResources(account, peerID, b.validatedPeers) allPotentialPeers, firewallRules := b.getPeerConnectionResources(account, peerID, b.validatedPeers)
isRouter, networkResourcesRoutes, sourcePeers := account.GetNetworkResourcesRoutesToSync(ctx, peerID, resourcePolicies, resourceRouters) isRouter, networkResourcesRoutes, sourcePeers := b.getNetworkResourcesForPeer(account, peerID)
var emptyExpiredPeers []*nbpeer.Peer var emptyExpiredPeers []*nbpeer.Peer
finalAllPeers := account.addNetworksRoutingPeers( finalAllPeers := b.addNetworksRoutingPeers(
networkResourcesRoutes, networkResourcesRoutes,
peer, peer,
allPotentialPeers, allPotentialPeers,
@@ -234,9 +221,7 @@ func (b *NetworkMapBuilder) buildPeerACLView(account *Account, peerID string) {
b.cache.peerACLs[peerID] = view b.cache.peerACLs[peerID] = view
} }
func (b *NetworkMapBuilder) getPeerConnectionResources( func (b *NetworkMapBuilder) getPeerConnectionResources(account *Account, peerID string,
account *Account,
peerID string,
validatedPeersMap map[string]struct{}, validatedPeersMap map[string]struct{},
) ([]*nbpeer.Peer, []*FirewallRule) { ) ([]*nbpeer.Peer, []*FirewallRule) {
@@ -257,13 +242,10 @@ func (b *NetworkMapBuilder) getPeerConnectionResources(
peers := make([]*nbpeer.Peer, 0) peers := make([]*nbpeer.Peer, 0)
for _, group := range peerGroups { for _, group := range peerGroups {
policies := b.cache.groupToPolicies[group] policies := b.cache.groupToPolicies[group]
for _, policy := range policies { for _, policy := range policies {
rules := b.cache.policyToRules[policy.ID] rules := b.cache.policyToRules[policy.ID]
for _, rule := range rules { for _, rule := range rules {
peerInSources := b.isPeerInGroupsCached(rule.Sources, peerGroupsMap) peerInSources := b.isPeerInGroupsCached(rule.Sources, peerGroupsMap)
peerInDestinations := b.isPeerInGroupsCached(rule.Destinations, peerGroupsMap) peerInDestinations := b.isPeerInGroupsCached(rule.Destinations, peerGroupsMap)
@@ -284,13 +266,13 @@ func (b *NetworkMapBuilder) getPeerConnectionResources(
if rule.Bidirectional { if rule.Bidirectional {
if peerInSources { if peerInSources {
b.generateResourcesCached( b.generateResourcesCached(
rule, destinationPeers, FirewallRuleDirectionIN, account, rule, destinationPeers, FirewallRuleDirectionIN,
peer, &peers, &fwRules, peersExists, rulesExists, peer, &peers, &fwRules, peersExists, rulesExists,
) )
} }
if peerInDestinations { if peerInDestinations {
b.generateResourcesCached( b.generateResourcesCached(
rule, sourcePeers, FirewallRuleDirectionOUT, account, rule, sourcePeers, FirewallRuleDirectionOUT,
peer, &peers, &fwRules, peersExists, rulesExists, peer, &peers, &fwRules, peersExists, rulesExists,
) )
} }
@@ -298,14 +280,14 @@ func (b *NetworkMapBuilder) getPeerConnectionResources(
if peerInSources { if peerInSources {
b.generateResourcesCached( b.generateResourcesCached(
rule, destinationPeers, FirewallRuleDirectionOUT, account, rule, destinationPeers, FirewallRuleDirectionOUT,
peer, &peers, &fwRules, peersExists, rulesExists, peer, &peers, &fwRules, peersExists, rulesExists,
) )
} }
if peerInDestinations { if peerInDestinations {
b.generateResourcesCached( b.generateResourcesCached(
rule, sourcePeers, FirewallRuleDirectionIN, account, rule, sourcePeers, FirewallRuleDirectionIN,
peer, &peers, &fwRules, peersExists, rulesExists, peer, &peers, &fwRules, peersExists, rulesExists,
) )
} }
@@ -316,10 +298,7 @@ func (b *NetworkMapBuilder) getPeerConnectionResources(
return peers, fwRules return peers, fwRules
} }
func (b *NetworkMapBuilder) isPeerInGroupsCached( func (b *NetworkMapBuilder) isPeerInGroupsCached(groupIDs []string, peerGroupsMap map[string]struct{}) bool {
groupIDs []string,
peerGroupsMap map[string]struct{},
) bool {
for _, groupID := range groupIDs { for _, groupID := range groupIDs {
if _, exists := peerGroupsMap[groupID]; exists { if _, exists := peerGroupsMap[groupID]; exists {
return true return true
@@ -328,12 +307,8 @@ func (b *NetworkMapBuilder) isPeerInGroupsCached(
return false return false
} }
func (b *NetworkMapBuilder) getPeersFromGroupsCached( func (b *NetworkMapBuilder) getPeersFromGroupsCached(account *Account, groupIDs []string,
account *Account, excludePeerID string, postureChecksIDs []string, validatedPeersMap map[string]struct{},
groupIDs []string,
excludePeerID string,
postureChecksIDs []string,
validatedPeersMap map[string]struct{},
) []*nbpeer.Peer { ) []*nbpeer.Peer {
ctx := context.Background() ctx := context.Background()
uniquePeers := make(map[string]*nbpeer.Peer) uniquePeers := make(map[string]*nbpeer.Peer)
@@ -373,17 +348,11 @@ func (b *NetworkMapBuilder) getPeersFromGroupsCached(
} }
func (b *NetworkMapBuilder) generateResourcesCached( func (b *NetworkMapBuilder) generateResourcesCached(
rule *PolicyRule, account *Account, rule *PolicyRule, groupPeers []*nbpeer.Peer, direction int, targetPeer *nbpeer.Peer,
groupPeers []*nbpeer.Peer, peers *[]*nbpeer.Peer, rules *[]*FirewallRule, peersExists map[string]struct{}, rulesExists map[string]struct{},
direction int,
targetPeer *nbpeer.Peer,
peers *[]*nbpeer.Peer,
rules *[]*FirewallRule,
peersExists map[string]struct{},
rulesExists map[string]struct{},
) { ) {
isAll := false isAll := false
if allGroup, err := b.account.Load().GetGroupAll(); err == nil { if allGroup, err := account.GetGroupAll(); err == nil {
isAll = (len(allGroup.Peers) - 1) == len(groupPeers) isAll = (len(allGroup.Peers) - 1) == len(groupPeers)
} }
@@ -409,8 +378,15 @@ func (b *NetworkMapBuilder) generateResourcesCached(
fr.PeerIP = "0.0.0.0" fr.PeerIP = "0.0.0.0"
} }
ruleID := rule.ID + fr.PeerIP + strconv.Itoa(direction) + var s strings.Builder
fr.Protocol + fr.Action + strings.Join(rule.Ports, ",") s.WriteString(rule.ID)
s.WriteString(fr.PeerIP)
s.WriteString(strconv.Itoa(direction))
s.WriteString(fr.Protocol)
s.WriteString(fr.Action)
s.WriteString(strings.Join(rule.Ports, ","))
ruleID := s.String()
if _, ok := rulesExists[ruleID]; ok { if _, ok := rulesExists[ruleID]; ok {
continue continue
@@ -426,6 +402,129 @@ func (b *NetworkMapBuilder) generateResourcesCached(
} }
} }
func (b *NetworkMapBuilder) getNetworkResourcesForPeer(account *Account, peerID string) (bool, []*route.Route, map[string]struct{}) {
ctx := context.Background()
var isRoutingPeer bool
var routes []*route.Route
allSourcePeers := make(map[string]struct{})
peerGroups := b.cache.peerToGroups[peerID]
peerGroupsMap := make(map[string]struct{}, len(peerGroups))
for _, groupID := range peerGroups {
peerGroupsMap[groupID] = struct{}{}
}
for _, resource := range b.cache.globalResources {
networkRoutingPeers := b.cache.resourceRouters[resource.NetworkID]
resourcePolicies := b.cache.resourcePolicies[resource.ID]
if len(resourcePolicies) == 0 {
continue
}
isRouterForThisResource := false
if networkRoutingPeers != nil {
if router, ok := networkRoutingPeers[peerID]; ok && router.Enabled {
isRoutingPeer = true
isRouterForThisResource = true
if rt := b.createNetworkResourceRoutes(resource, peerID, router, resourcePolicies); rt != nil {
routes = append(routes, rt)
}
}
}
hasAccessAsClient := false
if !isRouterForThisResource {
for _, policy := range resourcePolicies {
if b.isPeerInGroupsCached(policy.SourceGroups(), peerGroupsMap) {
if account.validatePostureChecksOnPeer(ctx, policy.SourcePostureChecks, peerID) {
hasAccessAsClient = true
break
}
}
}
}
if hasAccessAsClient && networkRoutingPeers != nil {
for routerPeerID, router := range networkRoutingPeers {
if router.Enabled {
if rt := b.createNetworkResourceRoutes(resource, routerPeerID, router, resourcePolicies); rt != nil {
routes = append(routes, rt)
}
}
}
}
if isRouterForThisResource {
for _, policy := range resourcePolicies {
peersWithAccess := b.getPeersFromGroupsCached(account, policy.SourceGroups(), "", policy.SourcePostureChecks, b.validatedPeers)
for _, p := range peersWithAccess {
allSourcePeers[p.ID] = struct{}{}
}
}
}
}
return isRoutingPeer, routes, allSourcePeers
}
func (b *NetworkMapBuilder) createNetworkResourceRoutes(
resource *resourceTypes.NetworkResource, routerPeerID string,
router *routerTypes.NetworkRouter, resourcePolicies []*Policy,
) *route.Route {
if len(resourcePolicies) > 0 {
peer := b.cache.globalPeers[routerPeerID]
if peer != nil {
return resource.ToRoute(peer, router)
}
}
return nil
}
func (b *NetworkMapBuilder) addNetworksRoutingPeers(
networkResourcesRoutes []*route.Route, peer *nbpeer.Peer, peersToConnect []*nbpeer.Peer,
expiredPeers []*nbpeer.Peer, isRouter bool, sourcePeers map[string]struct{},
) []*nbpeer.Peer {
networkRoutesPeers := make(map[string]struct{}, len(networkResourcesRoutes))
for _, r := range networkResourcesRoutes {
networkRoutesPeers[r.PeerID] = struct{}{}
}
delete(sourcePeers, peer.ID)
delete(networkRoutesPeers, peer.ID)
for _, existingPeer := range peersToConnect {
delete(sourcePeers, existingPeer.ID)
delete(networkRoutesPeers, existingPeer.ID)
}
for _, expPeer := range expiredPeers {
delete(sourcePeers, expPeer.ID)
delete(networkRoutesPeers, expPeer.ID)
}
missingPeers := make(map[string]struct{}, len(sourcePeers)+len(networkRoutesPeers))
if isRouter {
for p := range sourcePeers {
missingPeers[p] = struct{}{}
}
}
for p := range networkRoutesPeers {
missingPeers[p] = struct{}{}
}
for p := range missingPeers {
if missingPeer := b.cache.globalPeers[p]; missingPeer != nil {
peersToConnect = append(peersToConnect, missingPeer)
}
}
return peersToConnect
}
func (b *NetworkMapBuilder) buildPeerRoutesView(account *Account, peerID string) { func (b *NetworkMapBuilder) buildPeerRoutesView(account *Account, peerID string) {
ctx := context.Background() ctx := context.Background()
peer := account.GetPeer(peerID) peer := account.GetPeer(peerID)
@@ -433,7 +532,6 @@ func (b *NetworkMapBuilder) buildPeerRoutesView(account *Account, peerID string)
return return
} }
resourcePolicies := b.cache.resourcePolicies resourcePolicies := b.cache.resourcePolicies
resourceRouters := b.cache.resourceRouters
view := &PeerRoutesView{ view := &PeerRoutesView{
OwnRouteIDs: make([]route.ID, 0), OwnRouteIDs: make([]route.ID, 0),
@@ -441,7 +539,7 @@ func (b *NetworkMapBuilder) buildPeerRoutesView(account *Account, peerID string)
RouteFirewallRuleIDs: make([]string, 0), RouteFirewallRuleIDs: make([]string, 0),
} }
enabledRoutes, disabledRoutes := account.getRoutingPeerRoutes(ctx, peerID) enabledRoutes, disabledRoutes := b.getRoutingPeerRoutes(peerID)
for _, rt := range enabledRoutes { for _, rt := range enabledRoutes {
if rt.PeerID != "" && rt.PeerID != peerID { if rt.PeerID != "" && rt.PeerID != peerID {
if b.cache.globalPeers[rt.PeerID] == nil { if b.cache.globalPeers[rt.PeerID] == nil {
@@ -471,7 +569,7 @@ func (b *NetworkMapBuilder) buildPeerRoutesView(account *Account, peerID string)
continue continue
} }
activeRoutes, _ := account.getRoutingPeerRoutes(ctx, aclPeerID) activeRoutes, _ := b.getRoutingPeerRoutes(aclPeerID)
groupFilteredRoutes := account.filterRoutesByGroups(activeRoutes, peerGroupsMap) groupFilteredRoutes := account.filterRoutesByGroups(activeRoutes, peerGroupsMap)
haFilteredRoutes := account.filterRoutesFromPeersOfSameHAGroup(groupFilteredRoutes, peerRoutesMembership) haFilteredRoutes := account.filterRoutesFromPeersOfSameHAGroup(groupFilteredRoutes, peerRoutesMembership)
@@ -481,7 +579,7 @@ func (b *NetworkMapBuilder) buildPeerRoutesView(account *Account, peerID string)
} }
} }
_, networkResourcesRoutes, _ := account.GetNetworkResourcesRoutesToSync(ctx, peerID, resourcePolicies, resourceRouters) _, networkResourcesRoutes, _ := b.getNetworkResourcesForPeer(account, peerID)
for _, rt := range networkResourcesRoutes { for _, rt := range networkResourcesRoutes {
view.NetworkResourceIDs = append(view.NetworkResourceIDs, rt.ID) view.NetworkResourceIDs = append(view.NetworkResourceIDs, rt.ID)
@@ -507,6 +605,48 @@ func (b *NetworkMapBuilder) buildPeerRoutesView(account *Account, peerID string)
b.cache.peerRoutes[peerID] = view b.cache.peerRoutes[peerID] = view
} }
func (b *NetworkMapBuilder) getRoutingPeerRoutes(peerID string) (enabledRoutes []*route.Route, disabledRoutes []*route.Route) {
peer := b.cache.globalPeers[peerID]
if peer == nil {
return enabledRoutes, disabledRoutes
}
seenRoute := make(map[route.ID]struct{})
takeRoute := func(r *route.Route, id string) {
if _, ok := seenRoute[r.ID]; ok {
return
}
seenRoute[r.ID] = struct{}{}
if r.Enabled {
// maybe here is some mess - here we store peer key (see comment below)
r.Peer = peer.Key
enabledRoutes = append(enabledRoutes, r)
return
}
disabledRoutes = append(disabledRoutes, r)
}
peerGroups := b.cache.peerToGroups[peerID]
for _, groupID := range peerGroups {
groupRoutes := b.cache.groupToRoutes[groupID]
for _, r := range groupRoutes {
newPeerRoute := r.Copy()
// and here we store peer ID - this logic is taken from original account.getRoutingPeerRoutes
newPeerRoute.Peer = peerID
newPeerRoute.PeerGroups = nil
newPeerRoute.ID = route.ID(string(r.ID) + ":" + peerID)
takeRoute(newPeerRoute, peerID)
if r.Peer == peerID {
takeRoute(r.Copy(), peerID)
}
}
}
return enabledRoutes, disabledRoutes
}
func (b *NetworkMapBuilder) buildPeerDNSView(account *Account, peerID string) { func (b *NetworkMapBuilder) buildPeerDNSView(account *Account, peerID string) {
dnsManagementStatus := account.getPeerDNSManagementStatus(peerID) dnsManagementStatus := account.getPeerDNSManagementStatus(peerID)
dnsConfig := &nbdns.Config{ dnsConfig := &nbdns.Config{
@@ -525,11 +665,8 @@ func (b *NetworkMapBuilder) UpdateAccountPointer(account *Account) {
} }
func (b *NetworkMapBuilder) GetPeerNetworkMap( func (b *NetworkMapBuilder) GetPeerNetworkMap(
ctx context.Context, ctx context.Context, peerID string, peersCustomZone nbdns.CustomZone,
peerID string, validatedPeers map[string]struct{}, metrics *telemetry.AccountManagerMetrics,
peersCustomZone nbdns.CustomZone,
validatedPeers map[string]struct{},
metrics *telemetry.AccountManagerMetrics,
) *NetworkMap { ) *NetworkMap {
start := time.Now() start := time.Now()
account := b.account.Load() account := b.account.Load()
@@ -539,10 +676,6 @@ func (b *NetworkMapBuilder) GetPeerNetworkMap(
return &NetworkMap{Network: account.Network.Copy()} return &NetworkMap{Network: account.Network.Copy()}
} }
// if !maps.Equal(b.validatedPeers, validatedPeers) {
// b.updateValidatedPeers(validatedPeers)
// }
b.cache.mu.RLock() b.cache.mu.RLock()
defer b.cache.mu.RUnlock() defer b.cache.mu.RUnlock()
@@ -550,11 +683,6 @@ func (b *NetworkMapBuilder) GetPeerNetworkMap(
routesView := b.cache.peerRoutes[peerID] routesView := b.cache.peerRoutes[peerID]
dnsConfig := b.cache.peerDNS[peerID] dnsConfig := b.cache.peerDNS[peerID]
// if aclView == nil || routesView == nil || dnsConfig == nil {
// // log.Warnf("NetworkMapBuilder: Cache miss for peer %s, falling back to original method", peerID)
// // return account.GetPeerNetworkMap(ctx, peerID, peersCustomZone, validatedPeers, resourcePolicies, routers, metrics)
// }
nm := b.assembleNetworkMap(account, aclView, routesView, dnsConfig, peersCustomZone, validatedPeers) nm := b.assembleNetworkMap(account, aclView, routesView, dnsConfig, peersCustomZone, validatedPeers)
if metrics != nil { if metrics != nil {
@@ -572,12 +700,8 @@ func (b *NetworkMapBuilder) GetPeerNetworkMap(
} }
func (b *NetworkMapBuilder) assembleNetworkMap( func (b *NetworkMapBuilder) assembleNetworkMap(
account *Account, account *Account, aclView *PeerACLView, routesView *PeerRoutesView,
aclView *PeerACLView, dnsConfig *nbdns.Config, customZone nbdns.CustomZone, validatedPeers map[string]struct{},
routesView *PeerRoutesView,
dnsConfig *nbdns.Config,
customZone nbdns.CustomZone,
validatedPeers map[string]struct{},
) *NetworkMap { ) *NetworkMap {
var peersToConnect []*nbpeer.Peer var peersToConnect []*nbpeer.Peer
@@ -941,17 +1065,10 @@ func (b *NetworkMapBuilder) addRouteFirewallUpdate(
} }
func (b *NetworkMapBuilder) calculateNetworkResourceFirewallUpdates( func (b *NetworkMapBuilder) calculateNetworkResourceFirewallUpdates(
ctx context.Context, ctx context.Context, account *Account, newPeerID string,
account *Account, newPeer *nbpeer.Peer, peerGroups []string, updates map[string]*PeerUpdateDelta,
newPeerID string,
newPeer *nbpeer.Peer,
peerGroups []string,
updates map[string]*PeerUpdateDelta,
) { ) {
for _, resource := range account.NetworkResources { for _, resource := range b.cache.globalResources {
if !resource.Enabled {
continue
}
resourcePolicies := b.cache.resourcePolicies resourcePolicies := b.cache.resourcePolicies
resourceRouters := b.cache.resourceRouters resourceRouters := b.cache.resourceRouters