barometer: update DMA's vendoring packages
[barometer.git] / src / dma / vendor / github.com / go-redis / redis / internal / error.go
1 package internal
2
3 import (
4         "io"
5         "net"
6         "strings"
7
8         "github.com/go-redis/redis/internal/proto"
9 )
10
11 func IsRetryableError(err error, retryTimeout bool) bool {
12         if err == nil {
13                 return false
14         }
15         if err == io.EOF {
16                 return true
17         }
18         if netErr, ok := err.(net.Error); ok {
19                 if netErr.Timeout() {
20                         return retryTimeout
21                 }
22                 return true
23         }
24         s := err.Error()
25         if s == "ERR max number of clients reached" {
26                 return true
27         }
28         if strings.HasPrefix(s, "LOADING ") {
29                 return true
30         }
31         if strings.HasPrefix(s, "READONLY ") {
32                 return true
33         }
34         if strings.HasPrefix(s, "CLUSTERDOWN ") {
35                 return true
36         }
37         return false
38 }
39
40 func IsRedisError(err error) bool {
41         _, ok := err.(proto.RedisError)
42         return ok
43 }
44
45 func IsBadConn(err error, allowTimeout bool) bool {
46         if err == nil {
47                 return false
48         }
49         if IsRedisError(err) {
50                 // #790
51                 return IsReadOnlyError(err)
52         }
53         if allowTimeout {
54                 if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
55                         return false
56                 }
57         }
58         return true
59 }
60
61 func IsMovedError(err error) (moved bool, ask bool, addr string) {
62         if !IsRedisError(err) {
63                 return
64         }
65
66         s := err.Error()
67         if strings.HasPrefix(s, "MOVED ") {
68                 moved = true
69         } else if strings.HasPrefix(s, "ASK ") {
70                 ask = true
71         } else {
72                 return
73         }
74
75         ind := strings.LastIndex(s, " ")
76         if ind == -1 {
77                 return false, false, ""
78         }
79         addr = s[ind+1:]
80         return
81 }
82
83 func IsLoadingError(err error) bool {
84         return strings.HasPrefix(err.Error(), "LOADING ")
85 }
86
87 func IsReadOnlyError(err error) bool {
88         return strings.HasPrefix(err.Error(), "READONLY ")
89 }