add local cache to protect multiple writes to DB cache

This commit is contained in:
jguer
2023-02-21 17:44:07 +01:00
parent 20591cc42b
commit bdb084736b
+9
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)
}