mirror of
https://github.com/netbirdio/netbird.git
synced 2026-08-25 09:01:29 +02:00
40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
"github.com/netbirdio/netbird/management/internals/shared/requestbuffer"
|
|
"github.com/netbirdio/netbird/management/server/store"
|
|
"github.com/netbirdio/netbird/management/server/types"
|
|
)
|
|
|
|
const defaultAccountBufferInterval = 100 * time.Millisecond
|
|
|
|
type AccountRequestBuffer struct {
|
|
buffer *requestbuffer.Buffer[*types.Account]
|
|
}
|
|
|
|
func NewAccountRequestBuffer(ctx context.Context, store store.Store) *AccountRequestBuffer {
|
|
interval := requestbuffer.Interval(ctx, "NB_GET_ACCOUNT_BUFFER_INTERVAL", defaultAccountBufferInterval)
|
|
log.WithContext(ctx).Infof("set account request buffer interval to %s", interval)
|
|
|
|
return &AccountRequestBuffer{
|
|
buffer: requestbuffer.New(ctx, "account request buffer", interval, store.GetAccount),
|
|
}
|
|
}
|
|
|
|
func (ac *AccountRequestBuffer) GetAccountWithBackpressure(ctx context.Context, accountID string) (*types.Account, error) {
|
|
account, err := ac.buffer.Get(ctx, accountID)
|
|
if err != nil || account == nil {
|
|
return account, err
|
|
}
|
|
|
|
// Shallow copy the account so each caller gets its own struct value.
|
|
// This prevents data races when callers mutate fields like Policies.
|
|
accountCopy := *account
|
|
return &accountCopy, nil
|
|
}
|