build cache only once

This commit is contained in:
crn4
2025-10-29 13:25:03 +01:00
parent e0fed79690
commit f193f0fa9d
4 changed files with 9 additions and 16 deletions

View File

@@ -1,8 +1,6 @@
package server
import (
"context"
"github.com/netbirdio/netbird/management/server/types"
)
@@ -21,16 +19,7 @@ func (am *DefaultAccountManager) enrichAccountFromHolder(account *types.Account)
}
func (am *DefaultAccountManager) getAccountFromHolder(accountID string) *types.Account {
a := am.holder.GetAccount(accountID)
if a != nil {
return a
}
account, err := am.requestBuffer.GetAccountWithBackpressure(context.Background(), accountID)
if err != nil {
return nil
}
am.holder.AddAccount(account)
return account
return am.holder.GetAccount(accountID)
}
func (am *DefaultAccountManager) updateAccountInHolder(account *types.Account) {

View File

@@ -41,6 +41,9 @@ func (am *DefaultAccountManager) onPeerDeletedUpdNetworkMapCache(account *types.
func (am *DefaultAccountManager) updatePeerInNetworkMapCache(accountId string, peer *nbpeer.Peer) {
account := am.getAccountFromHolder(accountId)
if account == nil {
return
}
account.UpdatePeerInNetworkMapCache(peer)
}

View File

@@ -8,6 +8,7 @@ import (
"slices"
"strconv"
"strings"
"sync"
"time"
"github.com/hashicorp/go-multierror"
@@ -88,6 +89,7 @@ type Account struct {
Onboarding AccountOnboarding `gorm:"foreignKey:AccountID;references:id;constraint:OnDelete:CASCADE"`
NetworkMapCache *NetworkMapBuilder `gorm:"-"`
nmapInitOnce sync.Once
}
// this class is used by gorm only

View File

@@ -846,10 +846,9 @@ func peerIsNameserver(peer *nbpeer.Peer, nsGroup *nbdns.NameServerGroup) bool {
}
func (a *Account) initNetworkMapBuilder(validatedPeers map[string]struct{}) {
if a.NetworkMapCache != nil {
return
}
a.NetworkMapCache = NewNetworkMapBuilder(a, validatedPeers)
a.nmapInitOnce.Do(func() {
a.NetworkMapCache = NewNetworkMapBuilder(a, validatedPeers)
})
}
func (a *Account) InitNetworkMapBuilderIfNeeded(validatedPeers map[string]struct{}) {