@@ -20,9 +20,8 @@ import (
20
20
)
21
21
22
22
const (
23
- stateConnected = 1
24
- stateDataStale = 2
25
- stateLoading = 3
23
+ stateConnected = iota + 1
24
+ stateDataStale
26
25
)
27
26
28
27
type BackendConn struct {
@@ -124,55 +123,10 @@ func (bc *BackendConn) KeepAlive() bool {
124
123
if info ["master_link_status" ] == "down" {
125
124
return nil
126
125
}
127
- if bc .state .CompareAndSwap (stateDataStale , stateConnected ) {
128
- log .Warnf ("backend conn [%p] to %s, db-%d state = Connected (keepalive)" ,
129
- bc , bc .addr , bc .database )
130
- }
131
- return nil
132
- default :
133
- return fmt .Errorf ("bad info resp: should be string, but got %s" , resp .Type )
134
- }
135
- }()
136
- if err != nil && bc .closed .IsFalse () {
137
- log .WarnErrorf (err , "backend conn [%p] to %s, db-%d recover from DataStale failed" ,
138
- bc , bc .addr , bc .database )
139
- }
140
- }
141
-
142
- case stateLoading :
143
- m := & Request {}
144
- m .Multi = []* redis.Resp {
145
- redis .NewBulkBytes ([]byte ("INFO" )),
146
- }
147
- m .Batch = & sync.WaitGroup {}
148
- bc .PushBack (m )
149
-
150
- keepAliveCallback <- func () {
151
- m .Batch .Wait ()
152
- var err = func () error {
153
- if err := m .Err ; err != nil {
154
- return err
155
- }
156
- switch resp := m .Resp ; {
157
- case resp == nil :
158
- return ErrRespIsRequired
159
- case resp .IsError ():
160
- return fmt .Errorf ("bad info resp: %s" , resp .Value )
161
- case resp .IsBulkBytes ():
162
- var info = make (map [string ]string )
163
- for _ , line := range strings .Split (string (resp .Value ), "\n " ) {
164
- kv := strings .SplitN (line , ":" , 2 )
165
- if len (kv ) != 2 {
166
- continue
167
- }
168
- if key := strings .TrimSpace (kv [0 ]); key != "" {
169
- info [key ] = strings .TrimSpace (kv [1 ])
170
- }
171
- }
172
126
if info ["loading" ] == "1" {
173
127
return nil
174
128
}
175
- if bc .state .CompareAndSwap (stateLoading , stateConnected ) {
129
+ if bc .state .CompareAndSwap (stateDataStale , stateConnected ) {
176
130
log .Warnf ("backend conn [%p] to %s, db-%d state = Connected (keepalive)" ,
177
131
bc , bc .addr , bc .database )
178
132
}
@@ -182,11 +136,10 @@ func (bc *BackendConn) KeepAlive() bool {
182
136
}
183
137
}()
184
138
if err != nil && bc .closed .IsFalse () {
185
- log .WarnErrorf (err , "backend conn [%p] to %s, db-%d recover from Loading failed" ,
139
+ log .WarnErrorf (err , "backend conn [%p] to %s, db-%d recover from DataStale failed" ,
186
140
bc , bc .addr , bc .database )
187
141
}
188
142
}
189
-
190
143
}
191
144
return true
192
145
}
@@ -315,8 +268,10 @@ func (bc *BackendConn) run() {
315
268
bc , bc .addr , bc .database )
316
269
}
317
270
318
- var errMasterDown = []byte ("MASTERDOWN" )
319
- var errLoading = []byte ("LOADING" )
271
+ var (
272
+ errRespMasterDown = []byte ("MASTERDOWN" )
273
+ errRespLoading = []byte ("LOADING" )
274
+ )
320
275
321
276
func (bc * BackendConn ) loopReader (tasks <- chan * Request , c * redis.Conn , round int ) (err error ) {
322
277
defer func () {
@@ -334,14 +289,14 @@ func (bc *BackendConn) loopReader(tasks <-chan *Request, c *redis.Conn, round in
334
289
}
335
290
if resp != nil && resp .IsError () {
336
291
switch {
337
- case bytes .HasPrefix (resp .Value , errMasterDown ):
292
+ case bytes .HasPrefix (resp .Value , errRespMasterDown ):
338
293
if bc .state .CompareAndSwap (stateConnected , stateDataStale ) {
339
294
log .Warnf ("backend conn [%p] to %s, db-%d state = DataStale, caused by 'MASTERDOWN'" ,
340
295
bc , bc .addr , bc .database )
341
296
}
342
- case bytes .HasPrefix (resp .Value , errLoading ):
343
- if bc .state .CompareAndSwap (stateConnected , stateLoading ) {
344
- log .Warnf ("backend conn [%p] to %s, db-%d state = Loading " ,
297
+ case bytes .HasPrefix (resp .Value , errRespLoading ):
298
+ if bc .state .CompareAndSwap (stateConnected , stateDataStale ) {
299
+ log .Warnf ("backend conn [%p] to %s, db-%d state = DataStale, caused by 'LOADING' " ,
345
300
bc , bc .addr , bc .database )
346
301
}
347
302
}
0 commit comments