diff --git a/cmd/config.go b/cmd/config.go index 15e5d63fe..0d34d7da0 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -47,20 +47,31 @@ type RedisConfig struct { WriteTimeout string `yaml:"write_timeout"` // MaxRetries count of retries. MaxRetries int `yaml:"max_retries"` + // Enables read-only commands on slave nodes. + ReadOnly bool `yaml:"read_only"` + // Allows routing read-only commands to the **closest** master or slave node. + // It automatically enables ReadOnly. + RouteByLatency bool `yaml:"route_by_latency"` + // Allows routing read-only commands to the **random** master or slave node. + // It automatically enables ReadOnly. + RouteRandomly bool `yaml:"route_randomly"` } // GetSettings returns redis config parsed from moira config files. func (config *RedisConfig) GetSettings() redis.DatabaseConfig { return redis.DatabaseConfig{ - MasterName: config.MasterName, - Addrs: strings.Split(config.Addrs, ","), - Username: config.Username, - Password: config.Password, - MaxRetries: config.MaxRetries, - MetricsTTL: to.Duration(config.MetricsTTL), - DialTimeout: to.Duration(config.DialTimeout), - ReadTimeout: to.Duration(config.ReadTimeout), - WriteTimeout: to.Duration(config.WriteTimeout), + MasterName: config.MasterName, + Addrs: strings.Split(config.Addrs, ","), + Username: config.Username, + Password: config.Password, + MaxRetries: config.MaxRetries, + MetricsTTL: to.Duration(config.MetricsTTL), + DialTimeout: to.Duration(config.DialTimeout), + ReadTimeout: to.Duration(config.ReadTimeout), + WriteTimeout: to.Duration(config.WriteTimeout), + ReadOnly: config.ReadOnly, + RouteByLatency: config.RouteByLatency, + RouteRandomly: config.RouteRandomly, } } diff --git a/database/redis/config.go b/database/redis/config.go index 791363458..7c840c15b 100644 --- a/database/redis/config.go +++ b/database/redis/config.go @@ -15,6 +15,9 @@ type DatabaseConfig struct { ReadTimeout time.Duration WriteTimeout time.Duration MaxRetries int + ReadOnly bool + RouteByLatency bool + RouteRandomly bool } type NotificationHistoryConfig struct { diff --git a/database/redis/database.go b/database/redis/database.go index 22b891ca0..0633b3098 100644 --- a/database/redis/database.go +++ b/database/redis/database.go @@ -62,6 +62,9 @@ func NewDatabase(logger moira.Logger, config DatabaseConfig, nh NotificationHist ReadTimeout: config.ReadTimeout, WriteTimeout: config.WriteTimeout, MaxRetries: config.MaxRetries, + ReadOnly: config.ReadOnly, + RouteByLatency: config.RouteByLatency, + RouteRandomly: config.RouteRandomly, }) ctx := context.Background()