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

Method slotsmgrtExecWrapper

pkg/proxy/forward.go:169–214  ·  view source on GitHub ↗
(s *Slot, hkey []byte, database int32, seed uint, multi []*redis.Resp)

Source from the content-addressed store, hash-verified

167}
168
169func (d *forwardHelper) slotsmgrtExecWrapper(s *Slot, hkey []byte, database int32, seed uint, multi []*redis.Resp) (_ *redis.Resp, moved bool, _ error) {
170 m := &Request{}
171 m.Multi = make([]*redis.Resp, 0, 2+len(multi))
172 m.Multi = append(m.Multi,
173 redis.NewBulkBytes([]byte("SLOTSMGRT-EXEC-WRAPPER")),
174 redis.NewBulkBytes(hkey),
175 )
176 m.Multi = append(m.Multi, multi...)
177 m.Batch = &sync.WaitGroup{}
178
179 s.migrate.bc.BackendConn(database, seed, true).PushBack(m)
180
181 m.Batch.Wait()
182
183 if err := m.Err; err != nil {
184 return nil, false, err
185 }
186 switch resp := m.Resp; {
187 case resp == nil:
188 return nil, false, ErrRespIsRequired
189 case resp.IsError():
190 return nil, false, fmt.Errorf("bad slotsmgrt-exec-wrapper resp: %s", resp.Value)
191 case resp.IsArray():
192 if len(resp.Array) != 2 {
193 return nil, false, fmt.Errorf("bad slotsmgrt-exec-wrapper resp: array.len = %d",
194 len(resp.Array))
195 }
196 if !resp.Array[0].IsInt() || len(resp.Array[0].Value) != 1 {
197 return nil, false, fmt.Errorf("bad slotsmgrt-exec-wrapper resp: type(array[0]) = %s, len(array[0].value) = %d",
198 resp.Array[0].Type, len(resp.Array[0].Value))
199 }
200 switch resp.Array[0].Value[0] - '0' {
201 case 0:
202 return nil, true, nil
203 case 1:
204 return nil, false, nil
205 case 2:
206 return resp.Array[1], false, nil
207 default:
208 return nil, false, fmt.Errorf("bad slotsmgrt-exec-wrapper resp: [%s] %s",
209 resp.Array[0].Value, resp.Array[1].Value)
210 }
211 default:
212 return nil, false, fmt.Errorf("bad slotsmgrt-exec-wrapper resp: should be integer, but got %s", resp.Type)
213 }
214}
215
216func (d *forwardHelper) forward2(s *Slot, r *Request) *BackendConn {
217 var database, seed = r.Database, r.Seed16()

Callers 1

processMethod · 0.80

Calls 7

BackendConnMethod · 0.80
IsErrorMethod · 0.80
ErrorfMethod · 0.80
IsArrayMethod · 0.80
IsIntMethod · 0.80
PushBackMethod · 0.45
WaitMethod · 0.45

Tested by

no test coverage detected