MCPcopy
hub / github.com/redis/go-redis / loadState

Method loadState

osscluster.go:1499–1548  ·  osscluster.go::ClusterClient.loadState
(ctx context.Context)

Source from the content-addressed store, hash-verified

1497}
1498
1499func (c *ClusterClient) loadState(ctx context.Context) (*clusterState, error) {
1500 if c.opt.ClusterSlots != nil {
1501 slots, err := c.opt.ClusterSlots(ctx)
1502 if err != nil {
1503 return nil, err
1504 }
1505 return newClusterState(c.nodes, slots, "")
1506 }
1507
1508 addrs, err := c.nodes.Addrs()
1509 if err != nil {
1510 return nil, err
1511 }
1512
1513 var firstErr error
1514
1515 for _, idx := range rand.Perm(len(addrs)) {
1516 addr := addrs[idx]
1517
1518 node, err := c.nodes.GetOrCreate(addr)
1519 if err != nil {
1520 if firstErr == nil {
1521 firstErr = err
1522 }
1523 continue
1524 }
1525
1526 slots, err := node.Client.ClusterSlots(ctx).Result()
1527 if err != nil {
1528 if firstErr == nil {
1529 firstErr = err
1530 }
1531 continue
1532 }
1533
1534 return newClusterState(c.nodes, slots, addr)
1535 }
1536
1537 /*
1538 * No node is connectable. It's possible that all nodes' IP has changed.
1539 * Clear activeAddrs to let client be able to re-connect using the initial
1540 * setting of the addresses (e.g. [redis-cluster-0:6379, redis-cluster-1:6379]),
1541 * which might have chance to resolve domain name and get updated IP address.
1542 */
1543 c.nodes.mu.Lock()
1544 c.nodes.activeAddrs = nil
1545 c.nodes.mu.Unlock()
1546
1547 return nil, firstErr
1548}
1549
1550func (c *ClusterClient) Pipeline() Pipeliner {
1551 pipe := Pipeline{

Callers 1

LoadStateMethod · 0.95

Calls 5

newClusterStateFunction · 0.85
AddrsMethod · 0.80
GetOrCreateMethod · 0.80
ClusterSlotsMethod · 0.65
ResultMethod · 0.65

Tested by 1

LoadStateMethod · 0.76