Check Failing() before serving random node (#1825)

* Check Failing() before serving random node

* Revert condition

* Addressed review comments

* Fallback to random failing node
This commit is contained in:
Anatoly Rugalev 2021-07-17 18:20:48 +02:00 committed by GitHub
parent ce40cd942a
commit 62fc2c821b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 2 deletions

View File

@ -595,8 +595,16 @@ func (c *clusterState) slotRandomNode(slot int) (*clusterNode, error) {
if len(nodes) == 0 { if len(nodes) == 0 {
return c.nodes.Random() return c.nodes.Random()
} }
n := rand.Intn(len(nodes)) if len(nodes) == 1 {
return nodes[n], nil return nodes[0], nil
}
randomNodes := rand.Perm(len(nodes))
for _, idx := range randomNodes {
if node := nodes[idx]; !node.Failing() {
return node, nil
}
}
return nodes[randomNodes[0]], nil
} }
func (c *clusterState) slotNodes(slot int) []*clusterNode { func (c *clusterState) slotNodes(slot int) []*clusterNode {