Skip to content

Commit 1e74fb9

Browse files
committed
Trigger topology refresh on CLUSTERDOWN
When Redis cluster topology changes quickly, we may encounter a replica that was detached from its master and removed from the cluster. The driver, however, may still have this replica in topology. Sending requests to this replica trigger CLUSTERDOWN responses. To facilitate faster recovery we may force topology request. This is exactly what this commit does.
1 parent b0afaee commit 1e74fb9

File tree

2 files changed

+5
-0
lines changed

2 files changed

+5
-0
lines changed

redis/error.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ var (
6969
ErrMoved = ErrResult.NewSubtype("moved", ErrTraitClusterMove)
7070
// ErrAsk - ASK response
7171
ErrAsk = ErrResult.NewSubtype("ask", ErrTraitClusterMove)
72+
// ErrClusterDown - CLUSTERDOWN response
73+
ErrClusterDown = ErrResult.NewSubtype("clusterdown", ErrTraitNotSent)
7274
// ErrLoading - redis didn't finish start
7375
ErrLoading = ErrResult.NewSubtype("loading", ErrTraitNotSent)
7476
// ErrExecEmpty - EXEC returns nil (WATCH failed) (it is strange, cause we don't support WATCH)

redis/reader.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ func ReadResponse(b *bufio.Reader) (interface{}, int) {
4848
}
4949
return kind.New(txt).WithProperty(EKMovedTo, string(parts[2])).WithProperty(EKSlot, slot), len(line)
5050
}
51+
if strings.HasPrefix(txt, "CLUSTERDOWN") {
52+
return ErrClusterDown.New(txt), len(line)
53+
}
5154
if strings.HasPrefix(txt, "LOADING") {
5255
return ErrLoading.New(txt), len(line)
5356
}

0 commit comments

Comments
 (0)