diff --git a/cluster.go b/cluster.go index a8695c3..647a25b 100644 --- a/cluster.go +++ b/cluster.go @@ -583,7 +583,7 @@ func (c *ClusterClient) Process(cmd Cmder) error { } // On network errors try random node. - if internal.IsRetryableError(err) { + if internal.IsRetryableError(err) || internal.IsClusterDownError(err) { node, err = c.nodes.Random() if err != nil { cmd.setErr(err) diff --git a/cluster_test.go b/cluster_test.go index 0176c68..91b9e80 100644 --- a/cluster_test.go +++ b/cluster_test.go @@ -700,14 +700,14 @@ var _ = Describe("ClusterClient timeout", func() { testTimeout() }) - Context("network timeout", func() { + Context("ClientPause timeout", func() { const pause = time.Second BeforeEach(func() { opt := redisClusterOptions() - opt.ReadTimeout = 100 * time.Millisecond - opt.WriteTimeout = 100 * time.Millisecond - opt.MaxRedirects = 1 + opt.ReadTimeout = pause / 10 + opt.WriteTimeout = pause / 10 + opt.MaxRedirects = -1 client = cluster.clusterClient(opt) err := client.ForEachNode(func(client *redis.Client) error { diff --git a/internal/errors.go b/internal/error.go similarity index 88% rename from internal/errors.go rename to internal/error.go index c93e008..90f6503 100644 --- a/internal/errors.go +++ b/internal/error.go @@ -67,9 +67,9 @@ func IsMovedError(err error) (moved bool, ask bool, addr string) { } func IsLoadingError(err error) bool { - return strings.HasPrefix(err.Error(), "LOADING") + return strings.HasPrefix(err.Error(), "LOADING ") } -func IsExecAbortError(err error) bool { - return strings.HasPrefix(err.Error(), "EXECABORT") +func IsClusterDownError(err error) bool { + return strings.HasPrefix(err.Error(), "CLUSTERDOWN ") }