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

Method loopReader

pkg/proxy/session.go:152–194  ·  view source on GitHub ↗
(tasks *RequestChan, d *Router)

Source from the content-addressed store, hash-verified

150}
151
152func (s *Session) loopReader(tasks *RequestChan, d *Router) (err error) {
153 defer func() {
154 s.CloseReaderWithError(err)
155 }()
156
157 var (
158 breakOnFailure = s.config.SessionBreakOnFailure
159 maxPipelineLen = s.config.SessionMaxPipeline
160 )
161
162 for !s.quit {
163 multi, err := s.Conn.DecodeMultiBulk()
164 if err != nil {
165 return err
166 }
167 s.incrOpTotal()
168
169 if tasks.Buffered() > maxPipelineLen {
170 return s.incrOpFails(nil, ErrTooManyPipelinedRequests)
171 }
172
173 start := time.Now()
174 s.LastOpUnix = start.Unix()
175 s.Ops++
176
177 r := &Request{}
178 r.Multi = multi
179 r.Batch = &sync.WaitGroup{}
180 r.Database = s.database
181 r.UnixNano = start.UnixNano()
182
183 if err := s.handleRequest(r, d); err != nil {
184 r.Resp = redis.NewErrorf("ERR handle request, %s", err)
185 tasks.PushBack(r)
186 if breakOnFailure {
187 return err
188 }
189 } else {
190 tasks.PushBack(r)
191 }
192 }
193 return nil
194}
195
196func (s *Session) loopWriter(tasks *RequestChan) (err error) {
197 defer func() {

Callers 1

StartMethod · 0.95

Calls 7

CloseReaderWithErrorMethod · 0.95
incrOpTotalMethod · 0.95
incrOpFailsMethod · 0.95
handleRequestMethod · 0.95
DecodeMultiBulkMethod · 0.80
BufferedMethod · 0.80
PushBackMethod · 0.45

Tested by

no test coverage detected