@@ -20,9 +20,8 @@ import (
2020)
2121
2222const (
23- stateConnected = 1
24- stateDataStale = 2
25- stateLoading = 3
23+ stateConnected = iota + 1
24+ stateDataStale
2625)
2726
2827type BackendConn struct {
@@ -124,55 +123,10 @@ func (bc *BackendConn) KeepAlive() bool {
124123 if info ["master_link_status" ] == "down" {
125124 return nil
126125 }
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- }
172126 if info ["loading" ] == "1" {
173127 return nil
174128 }
175- if bc .state .CompareAndSwap (stateLoading , stateConnected ) {
129+ if bc .state .CompareAndSwap (stateDataStale , stateConnected ) {
176130 log .Warnf ("backend conn [%p] to %s, db-%d state = Connected (keepalive)" ,
177131 bc , bc .addr , bc .database )
178132 }
@@ -182,11 +136,10 @@ func (bc *BackendConn) KeepAlive() bool {
182136 }
183137 }()
184138 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" ,
186140 bc , bc .addr , bc .database )
187141 }
188142 }
189-
190143 }
191144 return true
192145}
@@ -315,8 +268,10 @@ func (bc *BackendConn) run() {
315268 bc , bc .addr , bc .database )
316269}
317270
318- var errMasterDown = []byte ("MASTERDOWN" )
319- var errLoading = []byte ("LOADING" )
271+ var (
272+ errRespMasterDown = []byte ("MASTERDOWN" )
273+ errRespLoading = []byte ("LOADING" )
274+ )
320275
321276func (bc * BackendConn ) loopReader (tasks <- chan * Request , c * redis.Conn , round int ) (err error ) {
322277 defer func () {
@@ -334,14 +289,14 @@ func (bc *BackendConn) loopReader(tasks <-chan *Request, c *redis.Conn, round in
334289 }
335290 if resp != nil && resp .IsError () {
336291 switch {
337- case bytes .HasPrefix (resp .Value , errMasterDown ):
292+ case bytes .HasPrefix (resp .Value , errRespMasterDown ):
338293 if bc .state .CompareAndSwap (stateConnected , stateDataStale ) {
339294 log .Warnf ("backend conn [%p] to %s, db-%d state = DataStale, caused by 'MASTERDOWN'" ,
340295 bc , bc .addr , bc .database )
341296 }
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' " ,
345300 bc , bc .addr , bc .database )
346301 }
347302 }
0 commit comments