From 1e84d5d93cfb155f7fbdad20fc8d2dafbccd8939 Mon Sep 17 00:00:00 2001 From: Jo Date: Wed, 22 Feb 2023 08:59:28 +0000 Subject: [PATCH] Authn: Add caching for anon service (#63521) add local cache to protect multiple writes to DB cache --- pkg/services/anonymous/anonimpl/impl.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/services/anonymous/anonimpl/impl.go b/pkg/services/anonymous/anonimpl/impl.go index 0006b5d5db7..3c40f38d4d8 100644 --- a/pkg/services/anonymous/anonimpl/impl.go +++ b/pkg/services/anonymous/anonimpl/impl.go @@ -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) }