(slot int)
| 933 | } |
| 934 | |
| 935 | func (c *clusterState) slotSlaveNode(slot int) (*clusterNode, error) { |
| 936 | nodes := c.slotNodes(slot) |
| 937 | switch len(nodes) { |
| 938 | case 0: |
| 939 | return c.nodes.Random() |
| 940 | case 1: |
| 941 | return nodes[0], nil |
| 942 | case 2: |
| 943 | slave := nodes[1] |
| 944 | if !slave.Failing() && !slave.Loading() { |
| 945 | return slave, nil |
| 946 | } |
| 947 | return nodes[0], nil |
| 948 | default: |
| 949 | var slave *clusterNode |
| 950 | for i := 0; i < 10; i++ { |
| 951 | n := rand.Intn(len(nodes)-1) + 1 |
| 952 | slave = nodes[n] |
| 953 | if !slave.Failing() && !slave.Loading() { |
| 954 | return slave, nil |
| 955 | } |
| 956 | } |
| 957 | |
| 958 | // All slaves are loading - use master. |
| 959 | return nodes[0], nil |
| 960 | } |
| 961 | } |
| 962 | |
| 963 | func (c *clusterState) slotClosestNode(slot int) (*clusterNode, error) { |
| 964 | nodes := c.slotNodes(slot) |
no test coverage detected