diff --git a/management/server/holder.go b/management/server/holder.go index 783ea2cde..3b81d24d4 100644 --- a/management/server/holder.go +++ b/management/server/holder.go @@ -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) { diff --git a/management/server/networkmap.go b/management/server/networkmap.go index 2270d16cc..bcefd89bc 100644 --- a/management/server/networkmap.go +++ b/management/server/networkmap.go @@ -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) } diff --git a/management/server/types/account.go b/management/server/types/account.go index 86d889c0c..e6019d2a3 100644 --- a/management/server/types/account.go +++ b/management/server/types/account.go @@ -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 diff --git a/management/server/types/networkmap.go b/management/server/types/networkmap.go index 54ceb54d2..6057194b6 100644 --- a/management/server/types/networkmap.go +++ b/management/server/types/networkmap.go @@ -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{}) {