From 86415981234f0f944ba0095fca3ef4cec0291226 Mon Sep 17 00:00:00 2001 From: fuyuan Date: Sun, 15 Oct 2023 10:33:10 +0800 Subject: [PATCH 1/2] Improve the reliability of the refresh process due to the loss of slot information --- cluster.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cluster.go b/cluster.go index a046ee2..e6d1070 100644 --- a/cluster.go +++ b/cluster.go @@ -106,7 +106,13 @@ func (c *Cluster) refresh(bg bool) error { var errMsgs []string var oldm, newm [HashSlots][]string - addrs, _ := c.getNodeAddrs(false) + // get all node addrs, including replicas + addrs, _ := c.getNodeAddrs(true) + // when addrs cannot be obtained, StartupNodes is always used to populate + if len(addrs) == 0 { + addrs = c.StartupNodes + } + for _, addr := range addrs { m, err := c.getClusterSlots(addr) if err != nil { From 5fcedd29f4e69e8640941e1cfd1dd316d94eddea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E6=B8=8A?= Date: Thu, 19 Oct 2023 10:33:51 +0800 Subject: [PATCH 2/2] Fix getting addrs on method refresh does not work as expected --- cluster.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/cluster.go b/cluster.go index e6d1070..2cbc8e8 100644 --- a/cluster.go +++ b/cluster.go @@ -106,11 +106,14 @@ func (c *Cluster) refresh(bg bool) error { var errMsgs []string var oldm, newm [HashSlots][]string - // get all node addrs, including replicas - addrs, _ := c.getNodeAddrs(true) - // when addrs cannot be obtained, StartupNodes is always used to populate + // get master nodes first + addrs, _ := c.getNodeAddrs(false) if len(addrs) == 0 { - addrs = c.StartupNodes + // when master nodes cannot be obtained, try to get all replicas + if addrs, _ = c.getNodeAddrs(true); len(addrs) == 0 { + // when there is no node information, StartupNodes is always used to populate + addrs = c.StartupNodes + } } for _, addr := range addrs {