codis icon indicating copy to clipboard operation
codis copied to clipboard

testonborrow的问题

Open lwtao opened this issue 6 years ago • 2 comments

客户端配置testonborrow=true之后,在执行命令前,会向服务端发送ping命令以检测服务端是否运行正常,在使用codis的情况下,codis是不是不能保证ping命令和正常要执行的命令发送到同一个后端redis上?

lwtao avatar May 17 '19 02:05 lwtao

就是下面一段代码,r.Multi是不是pipeline命令? 如果multi是一个的话,根据时间取模随机,如果是多个的话,就取第一个的地址。

最好请懂代码的人看一下

func (s *Session) handleRequestPing(r *Request, d *Router) error {
	var addr string
	var nblks = len(r.Multi) - 1
	switch {
	case nblks == 0:
		slot := uint32(time.Now().Nanosecond()) % MaxSlotNum
		return d.dispatchSlot(r, int(slot))
	default:
		addr = string(r.Multi[1].Value)
		copy(r.Multi[1:], r.Multi[2:])
		r.Multi = r.Multi[:nblks]
	}
	if !d.dispatchAddr(r, addr) {
		r.Resp = redis.NewErrorf("ERR backend server '%s' not found", addr)
		return nil
	}
	return nil
}

weilinqwe avatar May 17 '19 03:05 weilinqwe

@spinlock 帮忙解答下呗 谢谢

lwtao avatar May 19 '19 12:05 lwtao