mirror of
https://github.com/redis/go-redis.git
synced 2025-07-31 05:04:23 +03:00
Fix cluster pipeline tests.
This commit is contained in:
25
cluster.go
25
cluster.go
@ -95,18 +95,22 @@ func newClusterNode(clOpt *ClusterOptions, addr string) *clusterNode {
|
||||
}
|
||||
|
||||
if clOpt.RouteByLatency {
|
||||
const probes = 10
|
||||
for i := 0; i < probes; i++ {
|
||||
t1 := time.Now()
|
||||
node.Client.Ping()
|
||||
node.Latency += time.Since(t1)
|
||||
}
|
||||
node.Latency = node.Latency / probes
|
||||
node.updateLatency()
|
||||
}
|
||||
|
||||
return &node
|
||||
}
|
||||
|
||||
func (n *clusterNode) updateLatency() {
|
||||
const probes = 10
|
||||
for i := 0; i < probes; i++ {
|
||||
start := time.Now()
|
||||
n.Client.Ping()
|
||||
n.Latency += time.Since(start)
|
||||
}
|
||||
n.Latency = n.Latency / probes
|
||||
}
|
||||
|
||||
func (n *clusterNode) Loading() bool {
|
||||
return !n.loading.IsZero() && time.Since(n.loading) < time.Minute
|
||||
}
|
||||
@ -290,6 +294,8 @@ func (c *clusterState) slotSlaveNode(slot int) (*clusterNode, error) {
|
||||
}
|
||||
|
||||
func (c *clusterState) slotClosestNode(slot int) (*clusterNode, error) {
|
||||
const threshold = time.Millisecond
|
||||
|
||||
nodes := c.slotNodes(slot)
|
||||
if len(nodes) == 0 {
|
||||
return c.nodes.Random()
|
||||
@ -297,7 +303,10 @@ func (c *clusterState) slotClosestNode(slot int) (*clusterNode, error) {
|
||||
|
||||
var node *clusterNode
|
||||
for _, n := range nodes {
|
||||
if node == nil || n.Latency < node.Latency {
|
||||
if n.Loading() {
|
||||
continue
|
||||
}
|
||||
if node == nil || node.Latency-n.Latency > threshold {
|
||||
node = n
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user