MCPcopy
hub / github.com/CodisLabs/codis / Forward

Method Forward

pkg/proxy/forward.go:72–105  ·  view source on GitHub ↗
(s *Slot, r *Request, hkey []byte)

Source from the content-addressed store, hash-verified

70}
71
72func (d *forwardSemiAsync) Forward(s *Slot, r *Request, hkey []byte) error {
73 var loop int
74 for {
75 s.lock.RLock()
76 bc, retry, err := d.process(s, r, hkey)
77 s.lock.RUnlock()
78
79 switch {
80 case err != nil:
81 return err
82 case !retry:
83 if bc != nil {
84 bc.PushBack(r)
85 }
86 return nil
87 }
88
89 var delay time.Duration
90 switch {
91 case loop < 5:
92 delay = 0
93 case loop < 20:
94 delay = time.Millisecond * time.Duration(loop)
95 default:
96 delay = time.Millisecond * 20
97 }
98 time.Sleep(delay)
99
100 if r.IsBroken() {
101 return ErrRequestIsBroken
102 }
103 loop += 1
104 }
105}
106
107func (d *forwardSemiAsync) process(s *Slot, r *Request, hkey []byte) (_ *BackendConn, retry bool, _ error) {
108 if s.backend.bc == nil {

Callers

nothing calls this directly

Calls 5

processMethod · 0.95
DurationMethod · 0.80
IsBrokenMethod · 0.80
SleepMethod · 0.65
PushBackMethod · 0.45

Tested by

no test coverage detected