From f081435a564f68964ab9370b7e5f18ee439f9d4c Mon Sep 17 00:00:00 2001 From: Pascal Fischer <32096965+pascal-fischer@users.noreply.github.com> Date: Fri, 21 Mar 2025 18:16:27 +0100 Subject: [PATCH] [management] add log when using redis cache (#3562) --- management/server/account.go | 2 +- management/server/cache/idp_test.go | 2 +- management/server/cache/store.go | 13 ++++++++----- management/server/cache/store_test.go | 6 +++--- management/server/user_test.go | 4 ++-- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/management/server/account.go b/management/server/account.go index 8aa4e5dd0..0567a0d78 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -198,7 +198,7 @@ func BuildManager( log.WithContext(ctx).Infof("single account mode disabled, accounts number %d", accountsCounter) } - cacheStore, err := nbcache.NewStore(nbcache.DefaultIDPCacheExpirationMax, nbcache.DefaultIDPCacheCleanupInterval) + cacheStore, err := nbcache.NewStore(ctx, nbcache.DefaultIDPCacheExpirationMax, nbcache.DefaultIDPCacheCleanupInterval) if err != nil { return nil, fmt.Errorf("getting cache store: %s", err) } diff --git a/management/server/cache/idp_test.go b/management/server/cache/idp_test.go index a824bff42..beefcd9bd 100644 --- a/management/server/cache/idp_test.go +++ b/management/server/cache/idp_test.go @@ -44,7 +44,7 @@ func TestNewIDPCacheManagers(t *testing.T) { t.Setenv(cache.RedisStoreEnvVar, redisURL) } - cacheStore, err := cache.NewStore(cache.DefaultIDPCacheExpirationMax, cache.DefaultIDPCacheCleanupInterval) + cacheStore, err := cache.NewStore(context.Background(), cache.DefaultIDPCacheExpirationMax, cache.DefaultIDPCacheCleanupInterval) if err != nil { t.Fatalf("couldn't create cache store: %s", err) } diff --git a/management/server/cache/store.go b/management/server/cache/store.go index e4d4cc648..1c141a180 100644 --- a/management/server/cache/store.go +++ b/management/server/cache/store.go @@ -11,6 +11,7 @@ import ( redis_store "github.com/eko/gocache/store/redis/v4" gocache "github.com/patrickmn/go-cache" "github.com/redis/go-redis/v9" + log "github.com/sirupsen/logrus" ) // RedisStoreEnvVar is the environment variable that determines if a redis store should be used. @@ -19,16 +20,16 @@ const RedisStoreEnvVar = "NB_IDP_CACHE_REDIS_ADDRESS" // NewStore creates a new cache store with the given max timeout and cleanup interval. It checks for the environment Variable RedisStoreEnvVar // to determine if a redis store should be used. If the environment variable is set, it will attempt to connect to the redis store. -func NewStore(maxTimeout, cleanupInterval time.Duration) (store.StoreInterface, error) { +func NewStore(ctx context.Context, maxTimeout, cleanupInterval time.Duration) (store.StoreInterface, error) { redisAddr := os.Getenv(RedisStoreEnvVar) if redisAddr != "" { - return getRedisStore(redisAddr) + return getRedisStore(ctx, redisAddr) } goc := gocache.New(maxTimeout, cleanupInterval) return gocache_store.NewGoCache(goc), nil } -func getRedisStore(redisEnvAddr string) (store.StoreInterface, error) { +func getRedisStore(ctx context.Context, redisEnvAddr string) (store.StoreInterface, error) { options, err := redis.ParseURL(redisEnvAddr) if err != nil { return nil, fmt.Errorf("parsing redis cache url: %s", err) @@ -38,13 +39,15 @@ func getRedisStore(redisEnvAddr string) (store.StoreInterface, error) { options.MinIdleConns = 3 options.MaxActiveConns = 100 redisClient := redis.NewClient(options) - ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + subCtx, cancel := context.WithTimeout(ctx, 2*time.Second) defer cancel() - _, err = redisClient.Ping(ctx).Result() + _, err = redisClient.Ping(subCtx).Result() if err != nil { return nil, err } + log.WithContext(subCtx).Infof("using redis cache at %s", redisEnvAddr) + return redis_store.NewRedis(redisClient), nil } diff --git a/management/server/cache/store_test.go b/management/server/cache/store_test.go index 1f1bf5ec6..f49dd6bbd 100644 --- a/management/server/cache/store_test.go +++ b/management/server/cache/store_test.go @@ -15,7 +15,7 @@ import ( ) func TestMemoryStore(t *testing.T) { - memStore, err := cache.NewStore(100*time.Millisecond, 300*time.Millisecond) + memStore, err := cache.NewStore(context.Background(), 100*time.Millisecond, 300*time.Millisecond) if err != nil { t.Fatalf("couldn't create memory store: %s", err) } @@ -42,7 +42,7 @@ func TestMemoryStore(t *testing.T) { func TestRedisStoreConnectionFailure(t *testing.T) { t.Setenv(cache.RedisStoreEnvVar, "redis://127.0.0.1:6379") - _, err := cache.NewStore(10*time.Millisecond, 30*time.Millisecond) + _, err := cache.NewStore(context.Background(), 10*time.Millisecond, 30*time.Millisecond) if err == nil { t.Fatal("getting redis cache store should return error") } @@ -65,7 +65,7 @@ func TestRedisStoreConnectionSuccess(t *testing.T) { } t.Setenv(cache.RedisStoreEnvVar, redisURL) - redisStore, err := cache.NewStore(100*time.Millisecond, 300*time.Millisecond) + redisStore, err := cache.NewStore(context.Background(), 100*time.Millisecond, 300*time.Millisecond) if err != nil { t.Fatalf("couldn't create redis store: %s", err) } diff --git a/management/server/user_test.go b/management/server/user_test.go index 5a400f005..13df2694f 100644 --- a/management/server/user_test.go +++ b/management/server/user_test.go @@ -516,7 +516,7 @@ func TestUser_InviteNewUser(t *testing.T) { cacheLoading: map[string]chan struct{}{}, } - cs, err := nbcache.NewStore(nbcache.DefaultIDPCacheExpirationMax, nbcache.DefaultIDPCacheCleanupInterval) + cs, err := nbcache.NewStore(context.Background(), nbcache.DefaultIDPCacheExpirationMax, nbcache.DefaultIDPCacheCleanupInterval) require.NoError(t, err) am.cacheManager = nbcache.NewAccountUserDataCache(am.loadAccount, cs) @@ -1094,7 +1094,7 @@ func TestDefaultAccountManager_ExternalCache(t *testing.T) { cacheLoading: map[string]chan struct{}{}, } - cacheStore, err := nbcache.NewStore(nbcache.DefaultIDPCacheExpirationMax, nbcache.DefaultIDPCacheCleanupInterval) + cacheStore, err := nbcache.NewStore(context.Background(), nbcache.DefaultIDPCacheExpirationMax, nbcache.DefaultIDPCacheCleanupInterval) assert.NoError(t, err) am.externalCacheManager = nbcache.NewUserDataCache(cacheStore) am.cacheManager = nbcache.NewAccountUserDataCache(am.loadAccount, cacheStore)