From 4e5cb169558e2188beb9e51a175b0660be71c9c3 Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Tue, 25 Feb 2025 09:22:15 +0530 Subject: [PATCH] MM-62079: Using a cache prefix to isolate cache keys for each test (#30261) ```release-note A new config setting CacheSettings.RedisCachePrefix has been added which can be used to add a prefix to all Redis cache keys. ``` --- server/channels/api4/apitestlib.go | 1 + server/channels/api4/post_test.go | 2 -- server/channels/app/platform/service.go | 9 +++++---- server/platform/services/cache/provider.go | 19 ++++++++++++------- server/public/model/config.go | 5 +++++ 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/server/channels/api4/apitestlib.go b/server/channels/api4/apitestlib.go index 75e5bf2e0cd..9890b90675b 100644 --- a/server/channels/api4/apitestlib.go +++ b/server/channels/api4/apitestlib.go @@ -113,6 +113,7 @@ func setupTestHelper(dbStore store.Store, searchEngine *searchengine.Broker, ent *memoryConfig.CacheSettings.RedisAddress = redisHost + ":6379" *memoryConfig.CacheSettings.DisableClientCache = true *memoryConfig.CacheSettings.RedisDB = 0 + *memoryConfig.CacheSettings.RedisCachePrefix = model.NewId() options = append(options, app.ForceEnableRedis()) } if updateConfig != nil { diff --git a/server/channels/api4/post_test.go b/server/channels/api4/post_test.go index 2ba7c0a5ae9..a7bfab09b8c 100644 --- a/server/channels/api4/post_test.go +++ b/server/channels/api4/post_test.go @@ -131,7 +131,6 @@ func TestCreatePost(t *testing.T) { }) t.Run("Create posts without the USE_CHANNEL_MENTIONS Permission - returns ephemeral message with mentions and no ephemeral message without mentions", func(t *testing.T) { - t.Skip("MM-62764") wsClient := th.CreateConnectedWebSocketClient(t) defaultPerms := th.SaveDefaultRolePermissions() @@ -188,7 +187,6 @@ func TestCreatePost(t *testing.T) { } case <-timeout: require.Fail(t, fmt.Sprintf("Got %d ephemeral messages, expected: %d", gotEvents, expectedEvents)) - break } } }) diff --git a/server/channels/app/platform/service.go b/server/channels/app/platform/service.go index 0b1cad3fa12..5e57dfe3c43 100644 --- a/server/channels/app/platform/service.go +++ b/server/channels/app/platform/service.go @@ -168,10 +168,11 @@ func New(sc ServiceConfig, options ...Option) (*PlatformService, error) { } else if *cacheConfig.CacheType == model.CacheTypeRedis { ps.cacheProvider, err = cache.NewRedisProvider( &cache.RedisOptions{ - RedisAddr: *cacheConfig.RedisAddress, - RedisPassword: *cacheConfig.RedisPassword, - RedisDB: *cacheConfig.RedisDB, - DisableCache: *cacheConfig.DisableClientCache, + RedisAddr: *cacheConfig.RedisAddress, + RedisPassword: *cacheConfig.RedisPassword, + RedisDB: *cacheConfig.RedisDB, + RedisCachePrefix: *cacheConfig.RedisCachePrefix, + DisableCache: *cacheConfig.DisableClientCache, }, ) } diff --git a/server/platform/services/cache/provider.go b/server/platform/services/cache/provider.go index e187a596c9a..8c0dfef95d5 100644 --- a/server/platform/services/cache/provider.go +++ b/server/platform/services/cache/provider.go @@ -74,15 +74,17 @@ func (c *cacheProvider) Type() string { } type redisProvider struct { - client rueidis.Client - metrics einterfaces.MetricsInterface + client rueidis.Client + cachePrefix string + metrics einterfaces.MetricsInterface } type RedisOptions struct { - RedisAddr string - RedisPassword string - RedisDB int - DisableCache bool + RedisAddr string + RedisPassword string + RedisDB int + RedisCachePrefix string + DisableCache bool } // NewProvider creates a new CacheProvider @@ -107,11 +109,14 @@ func NewRedisProvider(opts *RedisOptions) (Provider, error) { if err != nil { return nil, err } - return &redisProvider{client: client}, nil + return &redisProvider{client: client, cachePrefix: opts.RedisCachePrefix}, nil } // NewCache creates a new cache with given opts func (r *redisProvider) NewCache(opts *CacheOptions) (Cache, error) { + if r.cachePrefix != "" { + opts.Name = r.cachePrefix + ":" + opts.Name + } rr, err := NewRedis(opts, r.client) rr.metrics = r.metrics return rr, err diff --git a/server/public/model/config.go b/server/public/model/config.go index 13a3081e977..43700a026cb 100644 --- a/server/public/model/config.go +++ b/server/public/model/config.go @@ -974,6 +974,7 @@ type CacheSettings struct { RedisAddress *string `access:",write_restrictable,cloud_restrictable"` // telemetry: none RedisPassword *string `access:",write_restrictable,cloud_restrictable"` // telemetry: none RedisDB *int `access:",write_restrictable,cloud_restrictable"` // telemetry: none + RedisCachePrefix *string `access:",write_restrictable,cloud_restrictable"` // telemetry: none DisableClientCache *bool `access:",write_restrictable,cloud_restrictable"` // telemetry: none } @@ -994,6 +995,10 @@ func (s *CacheSettings) SetDefaults() { s.RedisDB = NewPointer(-1) } + if s.RedisCachePrefix == nil { + s.RedisCachePrefix = NewPointer("") + } + if s.DisableClientCache == nil { s.DisableClientCache = NewPointer(false) }