diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a5038f..feae5b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Client listens on Context.Done while waiting for a connection from the pool and returns an error when context context is cancelled. - Add PubSub.ChannelWithSubscriptions that sends `*Subscription` in addition to `*Message` to allow detecting reconnections. - `time.Time` is now marshalled in RFC3339 format. `rdb.Get("foo").Time()` helper is added to parse time. +- `SetLimiter` is removed and added `Options.Limiter` instead. ## v6.15 diff --git a/options.go b/options.go index 066cbca..1c8ccbe 100644 --- a/options.go +++ b/options.go @@ -21,8 +21,8 @@ type Limiter interface { // If operation is allowed client must ReportResult of the operation // whether it is a success or a failure. Allow() error - // ReportResult reports the result of previously allowed operation. - // nil indicates a success, non-nil error indicates a failure. + // ReportResult reports the result of the previously allowed operation. + // nil indicates a success, non-nil error usually indicates a failure. ReportResult(result error) } @@ -96,6 +96,9 @@ type Options struct { // TLS Config to use. When set TLS will be negotiated. TLSConfig *tls.Config + + // Limiter interface used to implemented circuit breaker or rate limiter. + Limiter Limiter } func (opt *Options) init() { diff --git a/redis.go b/redis.go index 63133ab..123e64d 100644 --- a/redis.go +++ b/redis.go @@ -131,7 +131,6 @@ func (hs hooks) afterProcessPipeline(ctx context.Context, cmds []Cmder) error { type baseClient struct { opt *Options connPool pool.Pooler - limiter Limiter onClose func() error // hook called when client is closed } @@ -156,8 +155,8 @@ func (c *baseClient) newConn(ctx context.Context) (*pool.Conn, error) { } func (c *baseClient) getConn(ctx context.Context) (*pool.Conn, error) { - if c.limiter != nil { - err := c.limiter.Allow() + if c.opt.Limiter != nil { + err := c.opt.Limiter.Allow() if err != nil { return nil, err } @@ -165,8 +164,8 @@ func (c *baseClient) getConn(ctx context.Context) (*pool.Conn, error) { cn, err := c._getConn(ctx) if err != nil { - if c.limiter != nil { - c.limiter.ReportResult(err) + if c.opt.Limiter != nil { + c.opt.Limiter.ReportResult(err) } return nil, err } @@ -234,8 +233,8 @@ func (c *baseClient) initConn(ctx context.Context, cn *pool.Conn) error { } func (c *baseClient) releaseConn(cn *pool.Conn, err error) { - if c.limiter != nil { - c.limiter.ReportResult(err) + if c.opt.Limiter != nil { + c.opt.Limiter.ReportResult(err) } if isBadConn(err, false) { @@ -553,11 +552,6 @@ func (c *Client) Options() *Options { return c.opt } -func (c *Client) SetLimiter(l Limiter) *Client { - c.limiter = l - return c -} - type PoolStats pool.Stats // PoolStats returns connection pool stats.