Skip to content

Commit 62fc2c8

Browse files
Check Failing() before serving random node (#1825)
* Check Failing() before serving random node * Revert condition * Addressed review comments * Fallback to random failing node
1 parent ce40cd9 commit 62fc2c8

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

cluster.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -595,8 +595,16 @@ func (c *clusterState) slotRandomNode(slot int) (*clusterNode, error) {
595595
if len(nodes) == 0 {
596596
return c.nodes.Random()
597597
}
598-
n := rand.Intn(len(nodes))
599-
return nodes[n], nil
598+
if len(nodes) == 1 {
599+
return nodes[0], nil
600+
}
601+
randomNodes := rand.Perm(len(nodes))
602+
for _, idx := range randomNodes {
603+
if node := nodes[idx]; !node.Failing() {
604+
return node, nil
605+
}
606+
}
607+
return nodes[randomNodes[0]], nil
600608
}
601609

602610
func (c *clusterState) slotNodes(slot int) []*clusterNode {

0 commit comments

Comments
 (0)