Skip to content

Commit 694a710

Browse files
justinmirndyakov
andauthored
Make MASTERDOWN a retriable error in RedisCluster client (#3164)
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. Co-authored-by: Nedyalko Dyakov <[email protected]>
1 parent 30c128a commit 694a710

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

error.go

+3
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ func shouldRetry(err error, retryTimeout bool) bool {
7575
if strings.HasPrefix(s, "READONLY ") {
7676
return true
7777
}
78+
if strings.HasPrefix(s, "MASTERDOWN ") {
79+
return true
80+
}
7881
if strings.HasPrefix(s, "CLUSTERDOWN ") {
7982
return true
8083
}

0 commit comments

Comments
 (0)