{cluster,ring}: add support for context to ClusterClient and Ring

This commit is contained in:
Gabriel Aszalos 2018-03-07 14:39:56 +01:00
parent b533525eff
commit 731dd72b84
No known key found for this signature in database
GPG Key ID: A62C719E49E3B839
2 changed files with 39 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package redis
import (
"context"
"errors"
"fmt"
"math"
@ -557,6 +558,8 @@ func (c *clusterStateHolder) Get() (*clusterState, error) {
type ClusterClient struct {
cmdable
ctx context.Context
opt *ClusterOptions
nodes *clusterNodes
state *clusterStateHolder
@ -593,6 +596,22 @@ func NewClusterClient(opt *ClusterOptions) *ClusterClient {
return c
}
func (c *ClusterClient) Context() context.Context {
if c.ctx != nil {
return c.ctx
}
return context.Background()
}
func (c *ClusterClient) WithContext(ctx context.Context) *ClusterClient {
if ctx == nil {
panic("nil context")
}
c2 := c.copy()
c2.ctx = ctx
return c2
}
func (c *ClusterClient) copy() *ClusterClient {
cp := *c
return &cp

20
ring.go
View File

@ -1,6 +1,7 @@
package redis
import (
"context"
"errors"
"fmt"
"math/rand"
@ -289,6 +290,9 @@ func (c *ringShards) Close() error {
// Otherwise you should use Redis Cluster.
type Ring struct {
cmdable
ctx context.Context
opt *RingOptions
shards *ringShards
cmdsInfoCache *cmdsInfoCache
@ -318,6 +322,22 @@ func NewRing(opt *RingOptions) *Ring {
return ring
}
func (c *Ring) Context() context.Context {
if c.ctx != nil {
return c.ctx
}
return context.Background()
}
func (c *Ring) WithContext(ctx context.Context) *Ring {
if ctx == nil {
panic("nil context")
}
c2 := c.copy()
c2.ctx = ctx
return c2
}
func (c *Ring) copy() *Ring {
cp := *c
return &cp