Authn: Add caching for anon service (#63521)

add local cache to protect multiple writes to DB cache
This commit is contained in:
Jo 2023-02-22 08:59:28 +00:00 committed by GitHub
parent 45e478182b
commit 1e84d5d93c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,6 +9,7 @@ import (
"strings"
"time"
"github.com/grafana/grafana/pkg/infra/localcache"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/network"
"github.com/grafana/grafana/pkg/infra/remotecache"
@ -40,12 +41,14 @@ func (a *AnonSession) Key() (string, error) {
type AnonSessionService struct {
remoteCache remotecache.CacheStorage
log log.Logger
localCache *localcache.CacheService
}
func ProvideAnonymousSessionService(remoteCache remotecache.CacheStorage, usageStats usagestats.Service) *AnonSessionService {
a := &AnonSessionService{
remoteCache: remoteCache,
log: log.New("anonymous-session-service"),
localCache: localcache.New(29*time.Minute, 15*time.Minute),
}
usageStats.RegisterMetricsFunc(a.UsageStatFn)
@ -87,5 +90,11 @@ func (a *AnonSessionService) TagSession(ctx context.Context, httpReq *http.Reque
return err
}
if _, ok := a.localCache.Get(key); ok {
return nil
}
a.localCache.SetDefault(key, struct{}{})
return a.remoteCache.Set(ctx, key, key, thirtyDays)
}