Skip to content

Commit 86258a1

Browse files
committed
chore: lazy reload when moved or ask
1 parent 98bb99d commit 86258a1

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed
File renamed without changes.

cluster.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ func (c *clusterNodes) GC(generation uint32) {
352352
}
353353
}
354354

355-
func (c *clusterNodes) Get(addr string) (*clusterNode, error) {
355+
func (c *clusterNodes) GetOrCreate(addr string) (*clusterNode, error) {
356356
node, err := c.get(addr)
357357
if err != nil {
358358
return nil, err
@@ -416,7 +416,7 @@ func (c *clusterNodes) Random() (*clusterNode, error) {
416416
}
417417

418418
n := rand.Intn(len(addrs))
419-
return c.Get(addrs[n])
419+
return c.GetOrCreate(addrs[n])
420420
}
421421

422422
//------------------------------------------------------------------------------
@@ -474,7 +474,7 @@ func newClusterState(
474474
addr = replaceLoopbackHost(addr, originHost)
475475
}
476476

477-
node, err := c.nodes.Get(addr)
477+
node, err := c.nodes.GetOrCreate(addr)
478478
if err != nil {
479479
return nil, err
480480
}
@@ -824,8 +824,10 @@ func (c *ClusterClient) process(ctx context.Context, cmd Cmder) error {
824824
var addr string
825825
moved, ask, addr = isMovedError(lastErr)
826826
if moved || ask {
827+
c.state.LazyReload()
828+
827829
var err error
828-
node, err = c.nodes.Get(addr)
830+
node, err = c.nodes.GetOrCreate(addr)
829831
if err != nil {
830832
return err
831833
}
@@ -1022,7 +1024,7 @@ func (c *ClusterClient) loadState(ctx context.Context) (*clusterState, error) {
10221024
for _, idx := range rand.Perm(len(addrs)) {
10231025
addr := addrs[idx]
10241026

1025-
node, err := c.nodes.Get(addr)
1027+
node, err := c.nodes.GetOrCreate(addr)
10261028
if err != nil {
10271029
if firstErr == nil {
10281030
firstErr = err
@@ -1236,7 +1238,7 @@ func (c *ClusterClient) checkMovedErr(
12361238
return false
12371239
}
12381240

1239-
node, err := c.nodes.Get(addr)
1241+
node, err := c.nodes.GetOrCreate(addr)
12401242
if err != nil {
12411243
return false
12421244
}
@@ -1422,7 +1424,7 @@ func (c *ClusterClient) cmdsMoved(
14221424
addr string,
14231425
failedCmds *cmdsMap,
14241426
) error {
1425-
node, err := c.nodes.Get(addr)
1427+
node, err := c.nodes.GetOrCreate(addr)
14261428
if err != nil {
14271429
return err
14281430
}
@@ -1477,7 +1479,7 @@ func (c *ClusterClient) Watch(ctx context.Context, fn func(*Tx) error, keys ...s
14771479

14781480
moved, ask, addr := isMovedError(err)
14791481
if moved || ask {
1480-
node, err = c.nodes.Get(addr)
1482+
node, err = c.nodes.GetOrCreate(addr)
14811483
if err != nil {
14821484
return err
14831485
}
@@ -1589,7 +1591,7 @@ func (c *ClusterClient) cmdsInfo(ctx context.Context) (map[string]*CommandInfo,
15891591
for _, idx := range perm {
15901592
addr := addrs[idx]
15911593

1592-
node, err := c.nodes.Get(addr)
1594+
node, err := c.nodes.GetOrCreate(addr)
15931595
if err != nil {
15941596
if firstErr == nil {
15951597
firstErr = err

redis.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,9 @@ type conn struct {
710710
hooks // TODO: inherit hooks
711711
}
712712

713-
// Conn is like Client, but its pool contains single connection.
713+
// Conn represents a single Redis connection rather than a pool of connections.
714+
// Prefer running commands from Client unless there is a specific need
715+
// for a continuous single Redis connection.
714716
type Conn struct {
715717
*conn
716718
ctx context.Context

0 commit comments

Comments
 (0)