Skip to content

Commit

Permalink
feat: Pass redis connection pool settings to config (#1140)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tetrergeru authored Feb 17, 2025
1 parent 60a91ff commit ea541d7
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 34 deletions.
7 changes: 1 addition & 6 deletions cmd/api/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -274,12 +274,7 @@ func getCelebrationMode(mode string) api.CelebrationMode {

func getDefault() config {
return config{
Redis: cmd.RedisConfig{
Addrs: "localhost:6379",
MetricsTTL: "1h",
DialTimeout: "500ms",
MaxRetries: 3,
},
Redis: cmd.DefaultRedisConfig(),
NotificationHistory: cmd.NotificationHistoryConfig{
NotificationHistoryTTL: "48h",
},
Expand Down
14 changes: 10 additions & 4 deletions cmd/api/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,16 @@ func Test_webConfig_getDefault(t *testing.T) {
Convey("Flags successfully filled", t, func() {
expectedResult := config{
Redis: cmd.RedisConfig{
Addrs: "localhost:6379",
MetricsTTL: "1h",
DialTimeout: "500ms",
MaxRetries: 3,
Addrs: "localhost:6379",
MetricsTTL: "1h",
MaxRetries: 3,
MaxRedirects: 3,
DialTimeout: "500ms",
ReadTimeout: "3s",
WriteTimeout: "3s",
PoolTimeout: "4s",
PoolSize: 0,
PoolSizePerProc: 5,
},
Logger: cmd.LoggerConfig{
LogFile: "stdout",
Expand Down
6 changes: 1 addition & 5 deletions cmd/checker/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,7 @@ func (config *config) getSettings(logger moira.Logger) *checker.Config {

func getDefault() config {
return config{
Redis: cmd.RedisConfig{
Addrs: "localhost:6379",
MetricsTTL: "1h",
DialTimeout: "500ms",
},
Redis: cmd.DefaultRedisConfig(),
Logger: cmd.LoggerConfig{
LogFile: "stdout",
LogLevel: "info",
Expand Down
6 changes: 1 addition & 5 deletions cmd/cli/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,7 @@ func getDefault() config {
LogFile: "stdout",
LogLevel: "info",
LogPrettyFormat: false,
Redis: cmd.RedisConfig{
Addrs: "localhost:6379",
MetricsTTL: "1h",
DialTimeout: "500ms",
},
Redis: cmd.DefaultRedisConfig(),
Cleanup: cleanupConfig{
Whitelist: []string{},
CleanupMetricsDuration: "-168h",
Expand Down
34 changes: 30 additions & 4 deletions cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"os"
"runtime"
"strings"

"github.com/moira-alert/moira"
Expand Down Expand Up @@ -42,13 +43,13 @@ type RedisConfig struct {
MetricsTTL string `yaml:"metrics_ttl"`
// Dial connection timeout. Default is 500ms.
DialTimeout string `yaml:"dial_timeout"`
// Read-operation timeout. Default is 3000ms.
// Read-operation timeout. Default is 3s.
ReadTimeout string `yaml:"read_timeout"`
// Write-operation timeout. Default is ReadTimeout seconds.
// Write-operation timeout. Default is 3s.
WriteTimeout string `yaml:"write_timeout"`
// MaxRetries count of redirects.
// MaxRetries count of redirects. Default value is 3.
MaxRedirects int `yaml:"max_redirects"`
// MaxRetries count of retries.
// MaxRetries count of retries. Default value is 3.
MaxRetries int `yaml:"max_retries"`
// Minimum backoff between retries. Used to calculate exponential backoff. Default value is 0
MinRetryBackoff string `yaml:"min_retry_backoff"`
Expand All @@ -62,6 +63,29 @@ type RedisConfig struct {
// Allows routing read-only commands to the **random** master or slave node.
// It automatically enables ReadOnly.
RouteRandomly bool `yaml:"route_randomly"`
// Time to await for a client from client pool. Default value is 4s.
PoolTimeout string `yaml:"pool_timeout"`
// Constant part of the client pool size. Default value is 0.
// Total size of client pool is PoolSizePerProc * GOMAXPROCS + PoolSize
PoolSize int `yaml:"pool_size"`
// CPU-dependant of the client pool size. Default value is 5.
// Total size of client pool is PoolSizePerProc * GOMAXPROCS + PoolSize
PoolSizePerProc int `yaml:"pool_size_per_proc"`
}

func DefaultRedisConfig() RedisConfig {
return RedisConfig{
Addrs: "localhost:6379",
MetricsTTL: "1h",
MaxRetries: 3,
MaxRedirects: 3,
DialTimeout: "500ms",
ReadTimeout: "3s",
WriteTimeout: "3s",
PoolTimeout: "4s",
PoolSize: 0,
PoolSizePerProc: 5,
}
}

// GetSettings returns redis config parsed from moira config files.
Expand All @@ -84,6 +108,8 @@ func (config *RedisConfig) GetSettings() redis.DatabaseConfig {
ReadOnly: config.ReadOnly,
RouteByLatency: config.RouteByLatency,
RouteRandomly: config.RouteRandomly,
PoolTimeout: to.Duration(config.PoolTimeout),
PoolSize: config.PoolSize + runtime.GOMAXPROCS(0)*config.PoolSizePerProc,
}
}

Expand Down
6 changes: 1 addition & 5 deletions cmd/filter/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,7 @@ func (cfg patternStorageConfig) toFilterPatternStorageConfig() filter.PatternSto

func getDefault() config {
return config{
Redis: cmd.RedisConfig{
Addrs: "localhost:6379",
MetricsTTL: "1h",
DialTimeout: "500ms",
},
Redis: cmd.DefaultRedisConfig(),
Logger: cmd.LoggerConfig{
LogFile: "stdout",
LogLevel: "info",
Expand Down
6 changes: 1 addition & 5 deletions cmd/notifier/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,7 @@ type selfStateConfig struct {

func getDefault() config {
return config{
Redis: cmd.RedisConfig{
Addrs: "localhost:6379",
MetricsTTL: "1h",
DialTimeout: "500ms",
},
Redis: cmd.DefaultRedisConfig(),
Logger: cmd.LoggerConfig{
LogFile: "stdout",
LogLevel: "info",
Expand Down
3 changes: 3 additions & 0 deletions database/redis/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ type DatabaseConfig struct {
MinRetryBackoff time.Duration
MaxRetryBackoff time.Duration

PoolTimeout time.Duration
PoolSize int

ReadOnly bool
RouteByLatency bool
RouteRandomly bool
Expand Down
3 changes: 3 additions & 0 deletions database/redis/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ func NewDatabase(logger moira.Logger, config DatabaseConfig, nh NotificationHist
MinRetryBackoff: config.MinRetryBackoff,
MaxRetryBackoff: config.MaxRetryBackoff,

PoolTimeout: config.PoolTimeout,
PoolSize: config.PoolSize,

ReadOnly: config.ReadOnly,
RouteByLatency: config.RouteByLatency,
RouteRandomly: config.RouteRandomly,
Expand Down

0 comments on commit ea541d7

Please sign in to comment.