diff --git a/src/redis/cache_impl.go b/src/redis/cache_impl.go index b3d9b7406..00640661e 100644 --- a/src/redis/cache_impl.go +++ b/src/redis/cache_impl.go @@ -1,16 +1,16 @@ package redis import ( + "fmt" "math/rand" "github.com/coocood/freecache" "github.com/envoyproxy/ratelimit/src/limiter" "github.com/envoyproxy/ratelimit/src/server" "github.com/envoyproxy/ratelimit/src/settings" - logger "github.com/sirupsen/logrus" ) -func NewRateLimiterCacheImplFromSettings(s settings.Settings, localCache *freecache.Cache, srv server.Server, timeSource limiter.TimeSource, jitterRand *rand.Rand, expirationJitterMaxSeconds int64) limiter.RateLimitCache { +func NewRateLimiterCacheImplFromSettings(s settings.Settings, localCache *freecache.Cache, srv server.Server, timeSource limiter.TimeSource, jitterRand *rand.Rand, expirationJitterMaxSeconds int64) (limiter.RateLimitCache, error) { var perSecondPool Client if s.RedisPerSecond { perSecondPool = NewClientImpl(srv.Scope().Scope("redis_per_second_pool"), s.RedisPerSecondTls, s.RedisPerSecondAuth, @@ -28,8 +28,9 @@ func NewRateLimiterCacheImplFromSettings(s settings.Settings, localCache *freeca jitterRand, expirationJitterMaxSeconds, localCache, - s.NearLimitRatio) - } else if s.RateLimitAlgorithm == settings.WindowedRateLimit { + s.NearLimitRatio), nil + } + if s.RateLimitAlgorithm == settings.WindowedRateLimit { return NewWindowedRateLimitCacheImpl( otherPool, perSecondPool, @@ -37,9 +38,7 @@ func NewRateLimiterCacheImplFromSettings(s settings.Settings, localCache *freeca jitterRand, expirationJitterMaxSeconds, localCache, - s.NearLimitRatio) - } else { - logger.Fatalf("Unknown rate limit algorithm. %s\n", s.RateLimitAlgorithm) + s.NearLimitRatio), nil } - return nil + return nil, fmt.Errorf("Unknown rate limit algorithm. %s\n", s.RateLimitAlgorithm) } diff --git a/src/service_cmd/runner/runner.go b/src/service_cmd/runner/runner.go index 80e8e7814..7b59ada9d 100644 --- a/src/service_cmd/runner/runner.go +++ b/src/service_cmd/runner/runner.go @@ -60,16 +60,20 @@ func (runner *Runner) Run() { } srv := server.NewServer("ratelimit", runner.statsStore, localCache, settings.GrpcUnaryInterceptor(nil)) + rateLimitCache, err := redis.NewRateLimiterCacheImplFromSettings( + s, + localCache, + srv, + limiter.NewTimeSourceImpl(), + rand.New(limiter.NewLockedSource(time.Now().Unix())), + s.ExpirationJitterMaxSeconds) + if err != nil { + logger.Fatalf("Could not setup ratelimit cache. %v\n", err) + } service := ratelimit.NewService( srv.Runtime(), - redis.NewRateLimiterCacheImplFromSettings( - s, - localCache, - srv, - limiter.NewTimeSourceImpl(), - rand.New(limiter.NewLockedSource(time.Now().Unix())), - s.ExpirationJitterMaxSeconds), + rateLimitCache, config.NewRateLimitConfigLoaderImpl(), srv.Scope().Scope("service"), s.RuntimeWatchRoot,