@@ -47,7 +47,7 @@ func shouldRetry(err error, retryTimeout bool) bool {
47
47
if strings .HasPrefix (s , "LOADING " ) {
48
48
return true
49
49
}
50
- if strings . HasPrefix ( s , "READONLY " ) {
50
+ if IsReadOnlyError ( err ) {
51
51
return true
52
52
}
53
53
if strings .HasPrefix (s , "CLUSTERDOWN " ) {
@@ -75,7 +75,7 @@ func isBadConn(err error, allowTimeout bool, addr string) bool {
75
75
76
76
if isRedisError (err ) {
77
77
switch {
78
- case isReadOnlyError (err ):
78
+ case IsReadOnlyError (err ):
79
79
// Close connections in read only state in case domain addr is used
80
80
// and domain resolves to a different Redis Server. See #790.
81
81
return true
@@ -125,8 +125,15 @@ func isLoadingError(err error) bool {
125
125
return strings .HasPrefix (err .Error (), "LOADING " )
126
126
}
127
127
128
- func isReadOnlyError (err error ) bool {
129
- return strings .HasPrefix (err .Error (), "READONLY " )
128
+ func IsReadOnlyError (err error ) bool {
129
+ redisError := err .Error ()
130
+ if strings .HasPrefix (redisError , "READONLY " ) {
131
+ return true
132
+ }
133
+
134
+ // For a Lua script that includes write commands, the read-only error string
135
+ // contains "-READONLY" rather than beginning with "READONLY "
136
+ return strings .Contains (redisError , "-READONLY" )
130
137
}
131
138
132
139
func isMovedSameConnAddr (err error , addr string ) bool {
0 commit comments