feat: add configurable redis timeouts
This commit is contained in:
parent
9d32551ec5
commit
bc7422a50c
|
@ -1,5 +1,7 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
RedisModeSimple = "simple"
|
RedisModeSimple = "simple"
|
||||||
RedisModeSentinel = "sentinel"
|
RedisModeSentinel = "sentinel"
|
||||||
|
@ -7,13 +9,19 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
type RedisConfig struct {
|
type RedisConfig struct {
|
||||||
Adresses InterpolatedStringSlice `yaml:"addresses"`
|
Adresses InterpolatedStringSlice `yaml:"addresses"`
|
||||||
Master InterpolatedString `yaml:"master"`
|
Master InterpolatedString `yaml:"master"`
|
||||||
|
ReadTimeout InterpolatedDuration `yaml:"readTimeout"`
|
||||||
|
WriteTimeout InterpolatedDuration `yaml:"writeTimeout"`
|
||||||
|
DialTimeout InterpolatedDuration `yaml:"dialTimeout"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDefaultRedisConfig() RedisConfig {
|
func NewDefaultRedisConfig() RedisConfig {
|
||||||
return RedisConfig{
|
return RedisConfig{
|
||||||
Adresses: InterpolatedStringSlice{"localhost:6379"},
|
Adresses: InterpolatedStringSlice{"localhost:6379"},
|
||||||
Master: "",
|
Master: "",
|
||||||
|
ReadTimeout: InterpolatedDuration(30 * time.Second),
|
||||||
|
WriteTimeout: InterpolatedDuration(30 * time.Second),
|
||||||
|
DialTimeout: InterpolatedDuration(30 * time.Second),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/rsa"
|
"crypto/rsa"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/btcsuite/btcd/btcutil/base58"
|
"github.com/btcsuite/btcd/btcutil/base58"
|
||||||
|
@ -56,7 +55,7 @@ func PublicKeySet(keys ...jwk.Key) (jwk.Set, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadOrGenerate(path string, size int) (jwk.Key, error) {
|
func LoadOrGenerate(path string, size int) (jwk.Key, error) {
|
||||||
data, err := ioutil.ReadFile(path)
|
data, err := os.ReadFile(path)
|
||||||
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||||
return nil, errors.WithStack(err)
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
@ -72,7 +71,7 @@ func LoadOrGenerate(path string, size int) (jwk.Key, error) {
|
||||||
return nil, errors.WithStack(err)
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ioutil.WriteFile(path, data, 0o640); err != nil {
|
if err := os.WriteFile(path, data, 0o640); err != nil {
|
||||||
return nil, errors.WithStack(err)
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,11 +10,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewProxyRepository(ctx context.Context, conf config.RedisConfig) (store.ProxyRepository, error) {
|
func NewProxyRepository(ctx context.Context, conf config.RedisConfig) (store.ProxyRepository, error) {
|
||||||
rdb := redis.NewUniversalClient(&redis.UniversalOptions{
|
rdb := newRedisClient(conf)
|
||||||
Addrs: conf.Adresses,
|
|
||||||
MasterName: string(conf.Master),
|
|
||||||
})
|
|
||||||
|
|
||||||
return redisStore.NewProxyRepository(rdb), nil
|
return redisStore.NewProxyRepository(rdb), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"forge.cadoles.com/cadoles/bouncer/internal/proxy/director/layer/queue"
|
"forge.cadoles.com/cadoles/bouncer/internal/proxy/director/layer/queue"
|
||||||
queueRedis "forge.cadoles.com/cadoles/bouncer/internal/proxy/director/layer/queue/redis"
|
queueRedis "forge.cadoles.com/cadoles/bouncer/internal/proxy/director/layer/queue/redis"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/redis/go-redis/v9"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -36,10 +35,6 @@ func setupQueueLayer(conf *config.Config) (director.Layer, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func newQueueAdapter(redisConf config.RedisConfig) (queue.Adapter, error) {
|
func newQueueAdapter(redisConf config.RedisConfig) (queue.Adapter, error) {
|
||||||
rdb := redis.NewUniversalClient(&redis.UniversalOptions{
|
rdb := newRedisClient(redisConf)
|
||||||
Addrs: redisConf.Adresses,
|
|
||||||
MasterName: string(redisConf.Master),
|
|
||||||
})
|
|
||||||
|
|
||||||
return queueRedis.NewAdapter(rdb, 2), nil
|
return queueRedis.NewAdapter(rdb, 2), nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package setup
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"forge.cadoles.com/cadoles/bouncer/internal/config"
|
||||||
|
"github.com/redis/go-redis/v9"
|
||||||
|
)
|
||||||
|
|
||||||
|
func newRedisClient(conf config.RedisConfig) redis.UniversalClient {
|
||||||
|
return redis.NewUniversalClient(&redis.UniversalOptions{
|
||||||
|
Addrs: conf.Adresses,
|
||||||
|
MasterName: string(conf.Master),
|
||||||
|
ReadTimeout: time.Duration(conf.ReadTimeout),
|
||||||
|
WriteTimeout: time.Duration(conf.WriteTimeout),
|
||||||
|
DialTimeout: time.Duration(conf.DialTimeout),
|
||||||
|
RouteByLatency: true,
|
||||||
|
ContextTimeoutEnabled: true,
|
||||||
|
})
|
||||||
|
}
|
|
@ -147,6 +147,9 @@ redis:
|
||||||
addresses:
|
addresses:
|
||||||
- localhost:6379
|
- localhost:6379
|
||||||
master: ""
|
master: ""
|
||||||
|
writeTimeout: 30s
|
||||||
|
readTimeout: 30s
|
||||||
|
dialTimeout: 30s
|
||||||
|
|
||||||
# Configuration des logs
|
# Configuration des logs
|
||||||
logger:
|
logger:
|
||||||
|
|
Loading…
Reference in New Issue