From dc52593c8c63bc2a05796ec44efd317fd3e14b64 Mon Sep 17 00:00:00 2001 From: Vladimir Mihailenco Date: Tue, 30 Jun 2020 11:13:15 +0300 Subject: [PATCH] Reload state on read only error --- cluster.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cluster.go b/cluster.go index 3db0c83a..15cba8fd 100644 --- a/cluster.go +++ b/cluster.go @@ -780,7 +780,10 @@ func (c *ClusterClient) _process(ctx context.Context, cmd Cmder) error { if lastErr == nil { return nil } - if lastErr == pool.ErrClosed || isReadOnlyError(lastErr) { + if isReadOnly := isReadOnlyError(lastErr); isReadOnly || lastErr == pool.ErrClosed { + if isReadOnly { + c.state.LazyReload(ctx) + } node = nil continue } @@ -1438,7 +1441,10 @@ func (c *ClusterClient) Watch(ctx context.Context, fn func(*Tx) error, keys ...s continue } - if err == pool.ErrClosed || isReadOnlyError(err) { + if isReadOnly := isReadOnlyError(err); isReadOnly || err == pool.ErrClosed { + if isReadOnly { + c.state.LazyReload(ctx) + } node, err = c.slotMasterNode(ctx, slot) if err != nil { return err