@@ -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
0 commit comments