diff --git a/management/server/account.go b/management/server/account.go index 23781c915..49341a67b 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -161,7 +161,7 @@ type DefaultAccountManager struct { eventStore activity.Store geo *geolocation.Geolocation - cache *AccountCache + requestBuffer *AccountRequestBuffer // singleAccountMode indicates whether the instance has a single account. // If true, then every new user will end up under the same account. @@ -969,7 +969,7 @@ func BuildManager( userDeleteFromIDPEnabled: userDeleteFromIDPEnabled, integratedPeerValidator: integratedPeerValidator, metrics: metrics, - cache: NewAccountCache(ctx, store), + requestBuffer: NewAccountRequestBuffer(ctx, store), } allAccounts := store.GetAllAccounts(ctx) // enable single account mode only if configured by user and number of existing accounts is not grater than 1 diff --git a/management/server/account_cache.go b/management/server/account_request_buffer.go similarity index 75% rename from management/server/account_cache.go rename to management/server/account_request_buffer.go index 13ce45819..5f4897e6a 100644 --- a/management/server/account_cache.go +++ b/management/server/account_request_buffer.go @@ -21,7 +21,7 @@ type AccountResult struct { Err error } -type AccountCache struct { +type AccountRequestBuffer struct { store Store getAccountRequests map[string][]*AccountRequest mu sync.Mutex @@ -29,17 +29,19 @@ type AccountCache struct { bufferInterval time.Duration } -func NewAccountCache(ctx context.Context, store Store) *AccountCache { +func NewAccountRequestBuffer(ctx context.Context, store Store) *AccountRequestBuffer { bufferIntervalStr := os.Getenv("NB_GET_ACCOUNT_BUFFER_INTERVAL") bufferInterval, err := time.ParseDuration(bufferIntervalStr) - if err != nil && bufferIntervalStr != "" { - log.WithContext(ctx).Warnf("failed to parse account cache buffer interval: %s", err) - bufferInterval = 300 * time.Millisecond + if err != nil { + if bufferIntervalStr != "" { + log.WithContext(ctx).Warnf("failed to parse account request buffer interval: %s", err) + } + bufferInterval = 100 * time.Millisecond } - log.WithContext(ctx).Infof("set account cache buffer interval to %s", bufferInterval) + log.WithContext(ctx).Infof("set account request buffer interval to %s", bufferInterval) - ac := AccountCache{ + ac := AccountRequestBuffer{ store: store, getAccountRequests: make(map[string][]*AccountRequest), getAccountRequestCh: make(chan *AccountRequest), @@ -50,7 +52,7 @@ func NewAccountCache(ctx context.Context, store Store) *AccountCache { return &ac } -func (ac *AccountCache) GetAccountWithBackpressure(ctx context.Context, accountID string) (*Account, error) { +func (ac *AccountRequestBuffer) GetAccountWithBackpressure(ctx context.Context, accountID string) (*Account, error) { req := &AccountRequest{ AccountID: accountID, ResultChan: make(chan *AccountResult, 1), @@ -65,7 +67,7 @@ func (ac *AccountCache) GetAccountWithBackpressure(ctx context.Context, accountI return result.Account, result.Err } -func (ac *AccountCache) processGetAccountBatch(ctx context.Context, accountID string) { +func (ac *AccountRequestBuffer) processGetAccountBatch(ctx context.Context, accountID string) { ac.mu.Lock() requests := ac.getAccountRequests[accountID] delete(ac.getAccountRequests, accountID) @@ -86,7 +88,7 @@ func (ac *AccountCache) processGetAccountBatch(ctx context.Context, accountID st } } -func (ac *AccountCache) processGetAccountRequests(ctx context.Context) { +func (ac *AccountRequestBuffer) processGetAccountRequests(ctx context.Context) { for { select { case req := <-ac.getAccountRequestCh: diff --git a/management/server/management_proto_test.go b/management/server/management_proto_test.go index aa9c0d81e..d48e1f513 100644 --- a/management/server/management_proto_test.go +++ b/management/server/management_proto_test.go @@ -654,7 +654,7 @@ func Test_LoginPerformance(t *testing.T) { // {"M", 250, 1}, // {"L", 500, 1}, // {"XL", 750, 1}, - {"XXL", 1000, 5}, + {"XXL", 2000, 1}, } log.SetOutput(io.Discard) diff --git a/management/server/peer.go b/management/server/peer.go index c7d757bb4..6926ef6bc 100644 --- a/management/server/peer.go +++ b/management/server/peer.go @@ -714,7 +714,7 @@ func (am *DefaultAccountManager) LoginPeer(ctx context.Context, login PeerLogin) unlockPeer() unlockPeer = nil - account, err := am.cache.GetAccountWithBackpressure(ctx, accountID) + account, err := am.requestBuffer.GetAccountWithBackpressure(ctx, accountID) if err != nil { return nil, nil, nil, err }