Skip to content

Commit 3e69191

Browse files
committed
proxy: handle LOADING error response with the same method as MASTERDOWN
1 parent 17cfb7c commit 3e69191

File tree

1 file changed

+12
-57
lines changed

1 file changed

+12
-57
lines changed

pkg/proxy/backend.go

Lines changed: 12 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ import (
2020
)
2121

2222
const (
23-
stateConnected = 1
24-
stateDataStale = 2
25-
stateLoading = 3
23+
stateConnected = iota + 1
24+
stateDataStale
2625
)
2726

2827
type 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

321276
func (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

Comments
 (0)