@@ -352,7 +352,7 @@ func (c *clusterNodes) GC(generation uint32) {
352
352
}
353
353
}
354
354
355
- func (c * clusterNodes ) Get (addr string ) (* clusterNode , error ) {
355
+ func (c * clusterNodes ) GetOrCreate (addr string ) (* clusterNode , error ) {
356
356
node , err := c .get (addr )
357
357
if err != nil {
358
358
return nil , err
@@ -416,7 +416,7 @@ func (c *clusterNodes) Random() (*clusterNode, error) {
416
416
}
417
417
418
418
n := rand .Intn (len (addrs ))
419
- return c .Get (addrs [n ])
419
+ return c .GetOrCreate (addrs [n ])
420
420
}
421
421
422
422
//------------------------------------------------------------------------------
@@ -474,7 +474,7 @@ func newClusterState(
474
474
addr = replaceLoopbackHost (addr , originHost )
475
475
}
476
476
477
- node , err := c .nodes .Get (addr )
477
+ node , err := c .nodes .GetOrCreate (addr )
478
478
if err != nil {
479
479
return nil , err
480
480
}
@@ -824,8 +824,10 @@ func (c *ClusterClient) process(ctx context.Context, cmd Cmder) error {
824
824
var addr string
825
825
moved , ask , addr = isMovedError (lastErr )
826
826
if moved || ask {
827
+ c .state .LazyReload ()
828
+
827
829
var err error
828
- node , err = c .nodes .Get (addr )
830
+ node , err = c .nodes .GetOrCreate (addr )
829
831
if err != nil {
830
832
return err
831
833
}
@@ -1022,7 +1024,7 @@ func (c *ClusterClient) loadState(ctx context.Context) (*clusterState, error) {
1022
1024
for _ , idx := range rand .Perm (len (addrs )) {
1023
1025
addr := addrs [idx ]
1024
1026
1025
- node , err := c .nodes .Get (addr )
1027
+ node , err := c .nodes .GetOrCreate (addr )
1026
1028
if err != nil {
1027
1029
if firstErr == nil {
1028
1030
firstErr = err
@@ -1236,7 +1238,7 @@ func (c *ClusterClient) checkMovedErr(
1236
1238
return false
1237
1239
}
1238
1240
1239
- node , err := c .nodes .Get (addr )
1241
+ node , err := c .nodes .GetOrCreate (addr )
1240
1242
if err != nil {
1241
1243
return false
1242
1244
}
@@ -1422,7 +1424,7 @@ func (c *ClusterClient) cmdsMoved(
1422
1424
addr string ,
1423
1425
failedCmds * cmdsMap ,
1424
1426
) error {
1425
- node , err := c .nodes .Get (addr )
1427
+ node , err := c .nodes .GetOrCreate (addr )
1426
1428
if err != nil {
1427
1429
return err
1428
1430
}
@@ -1477,7 +1479,7 @@ func (c *ClusterClient) Watch(ctx context.Context, fn func(*Tx) error, keys ...s
1477
1479
1478
1480
moved , ask , addr := isMovedError (err )
1479
1481
if moved || ask {
1480
- node , err = c .nodes .Get (addr )
1482
+ node , err = c .nodes .GetOrCreate (addr )
1481
1483
if err != nil {
1482
1484
return err
1483
1485
}
@@ -1589,7 +1591,7 @@ func (c *ClusterClient) cmdsInfo(ctx context.Context) (map[string]*CommandInfo,
1589
1591
for _ , idx := range perm {
1590
1592
addr := addrs [idx ]
1591
1593
1592
- node , err := c .nodes .Get (addr )
1594
+ node , err := c .nodes .GetOrCreate (addr )
1593
1595
if err != nil {
1594
1596
if firstErr == nil {
1595
1597
firstErr = err
0 commit comments