MCPcopy Index your code
hub / github.com/CodisLabs/codis / loopReader

Method loopReader

pkg/proxy/backend.go:276–307  ·  view source on GitHub ↗
(tasks <-chan *Request, c *redis.Conn, round int)

Source from the content-addressed store, hash-verified

274)
275
276func (bc *BackendConn) loopReader(tasks <-chan *Request, c *redis.Conn, round int) (err error) {
277 defer func() {
278 c.Close()
279 for r := range tasks {
280 bc.setResponse(r, nil, ErrBackendConnReset)
281 }
282 log.WarnErrorf(err, "backend conn [%p] to %s, db-%d reader-[%d] exit",
283 bc, bc.addr, bc.database, round)
284 }()
285 for r := range tasks {
286 resp, err := c.Decode()
287 if err != nil {
288 return bc.setResponse(r, nil, fmt.Errorf("backend conn failure, %s", err))
289 }
290 if resp != nil && resp.IsError() {
291 switch {
292 case bytes.HasPrefix(resp.Value, errRespMasterDown):
293 if bc.state.CompareAndSwap(stateConnected, stateDataStale) {
294 log.Warnf("backend conn [%p] to %s, db-%d state = DataStale, caused by 'MASTERDOWN'",
295 bc, bc.addr, bc.database)
296 }
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'",
300 bc, bc.addr, bc.database)
301 }
302 }
303 }
304 bc.setResponse(r, resp, nil)
305 }
306 return nil
307}
308
309func (bc *BackendConn) delayBeforeRetry() {
310 bc.retry.fails += 1

Callers 1

newBackendReaderMethod · 0.95

Calls 8

setResponseMethod · 0.95
WarnErrorfMethod · 0.80
DecodeMethod · 0.80
ErrorfMethod · 0.80
IsErrorMethod · 0.80
WarnfMethod · 0.80
CloseMethod · 0.65
CompareAndSwapMethod · 0.45

Tested by

no test coverage detected