Skip to content

Commit 09cd2d3

Browse files
committed
Make MASTERDOWN a retriable error in RedisCluster client
When clusters are running with `replica-server-stale-data no`, replicas will return a MASTERDOWN error under two conditions: 1. The primary has failed and we are not serving requests. 2. A replica has just started and has not yet synced from the primary. The former, primary has failed and we are not serving requests, is similar to a CLUSTERDOWN error and should be similarly retriable. When a replica has just started and has not yet synced from the primary the request should be retried on other available nodes in the shard. Otherwise a percentage of the read requests to the shard will fail. Examples when `replica-server-stale-data no` is enabled: 1. In a cluster using `ReadOnly` with a single read replica, every read request will return errors to the client because MASTERDOWN is not a retriable error. 2. In a cluster using `RouteRandomly` a percentage of the requests will return errors to the client based on if this server was selected.
1 parent cc9bcb0 commit 09cd2d3

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

error.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ func shouldRetry(err error, retryTimeout bool) bool {
6363
if strings.HasPrefix(s, "READONLY ") {
6464
return true
6565
}
66+
if strings.HasPrefix(s, "MASTERDOWN ") {
67+
return true
68+
}
6669
if strings.HasPrefix(s, "CLUSTERDOWN ") {
6770
return true
6871
}

0 commit comments

Comments
 (0)