From ce90c63d01a4c246ba4f130d98f847e33b9bff4a Mon Sep 17 00:00:00 2001 From: Hitesh Aringa Date: Fri, 11 Aug 2023 16:28:53 +0000 Subject: [PATCH] [CODE-717]: redis sentinel mode (#292) --- cli/server/redis.go | 18 +++++++++++++++++- gitrpc/server/config.go | 3 +++ types/config.go | 9 ++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/cli/server/redis.go b/cli/server/redis.go index 0f6756742..717d28a6e 100644 --- a/cli/server/redis.go +++ b/cli/server/redis.go @@ -5,15 +5,31 @@ package server import ( + "strings" + "github.com/harness/gitness/types" "github.com/go-redis/redis/v8" ) // ProvideRedis provides a redis client based on the configuration. -// TODO: add support for sentinal / cluster // TODO: add support for TLS func ProvideRedis(config *types.Config) (redis.UniversalClient, error) { + if config.Redis.SentinelMode { + addrs := strings.Split(config.Redis.SentinelEndpoint, ",") + + failoverOptions := &redis.FailoverOptions{ + MasterName: config.Redis.SentinelMaster, + SentinelAddrs: addrs, + MaxRetries: config.Redis.MaxRetries, + MinIdleConns: config.Redis.MinIdleConnections, + } + if config.Redis.Password != "" { + failoverOptions.Password = config.Redis.Password + } + return redis.NewFailoverClient(failoverOptions), nil + } + options := &redis.Options{ Addr: config.Redis.Endpoint, MaxRetries: config.Redis.MaxRetries, diff --git a/gitrpc/server/config.go b/gitrpc/server/config.go index 8e736ba3e..05273073d 100644 --- a/gitrpc/server/config.go +++ b/gitrpc/server/config.go @@ -34,6 +34,9 @@ type Config struct { MaxRetries int `envconfig:"GITRPC_REDIS_MAX_RETRIES" default:"3"` MinIdleConnections int `envconfig:"GITRPC_REDIS_MIN_IDLE_CONNECTIONS" default:"0"` Password string `envconfig:"GITRPC_REDIS_PASSWORD"` + SentinelMode bool `envconfig:"GITRPC_REDIS_USE_SENTINEL" default:"false"` + SentinelMaster string `envconfig:"GITRPC_REDIS_SENTINEL_MASTER"` + SentinelEndpoint string `envconfig:"GITRPC_REDIS_SENTINEL_ENDPOINT"` } } diff --git a/types/config.go b/types/config.go index ac4af71a1..b08f391aa 100644 --- a/types/config.go +++ b/types/config.go @@ -128,10 +128,13 @@ type Config struct { } Redis struct { - Endpoint string `envconfig:"GITNESS_REDIS_ENDPOINT" default:"localhost:6379"` - MaxRetries int `envconfig:"GITNESS_REDIS_MAX_RETRIES" default:"3"` - MinIdleConnections int `envconfig:"GITNESS_REDIS_MIN_IDLE_CONNECTIONS" default:"0"` + Endpoint string `envconfig:"GITNESS_REDIS_ENDPOINT" default:"localhost:6379"` + MaxRetries int `envconfig:"GITNESS_REDIS_MAX_RETRIES" default:"3"` + MinIdleConnections int `envconfig:"GITNESS_REDIS_MIN_IDLE_CONNECTIONS" default:"0"` Password string `envconfig:"GITNESS_REDIS_PASSWORD"` + SentinelMode bool `envconfig:"GITNESS_REDIS_USE_SENTINEL" default:"false"` + SentinelMaster string `envconfig:"GITNESS_REDIS_SENTINEL_MASTER"` + SentinelEndpoint string `envconfig:"GITNESS_REDIS_SENTINEL_ENDPOINT"` } Lock struct {