// ROLE func RoleCmd(s Session, args [][]byte) (redis.Resp, error) { if len(args) != 0 { return toRespErrorf("len(args) = %d, expect = 0", len(args)) } c, _ := s.(*conn) if c == nil { return nil, errors.New("invalid connection") } ay := redis.NewArray() if masterAddr := c.h.masterAddr.Get(); masterAddr == "" { // master ay.Append(redis.NewBulkBytesWithString("master")) c.h.repl.RLock() defer c.h.repl.RUnlock() ay.Append(redis.NewInt(c.h.repl.masterOffset)) slaves := redis.NewArray() for slave, _ := range c.h.repl.slaves { a := redis.NewArray() if addr := slave.nc.RemoteAddr(); addr == nil { continue } else { a.Append(redis.NewBulkBytesWithString(strings.Split(addr.String(), ":")[0])) } a.Append(redis.NewBulkBytesWithString(fmt.Sprintf("%d", slave.listeningPort.Get()))) a.Append(redis.NewBulkBytesWithString(fmt.Sprintf("%d", slave.syncOffset.Get()))) slaves.Append(a) } ay.Append(slaves) } else { // slave ay.Append(redis.NewBulkBytesWithString("slave")) seps := strings.Split(masterAddr, ":") if len(seps) == 2 { port, err := strconv.ParseInt(seps[1], 10, 16) if err != nil { return toRespError(err) } ay.Append(redis.NewBulkBytesWithString(seps[0])) ay.Append(redis.NewInt(int64(port))) } else { return toRespErrorf("invalid master addr, must ip:port, but %s", masterAddr) } ay.Append(redis.NewBulkBytesWithString(c.h.masterConnState.Get())) ay.Append(redis.NewInt(c.h.syncOffset.Get())) } return ay, nil }
// SLOTSMGRTTAGONE host port timeout key func SlotsMgrtTagOneCmd(s Session, args [][]byte) (redis.Resp, error) { if n, err := s.Store().SlotsMgrtTagOne(s.DB(), args); err != nil { return toRespError(err) } else { return redis.NewInt(n), nil } }
// HINCRBY key field delta func HIncrByCmd(s Session, args [][]byte) (redis.Resp, error) { if v, err := s.Store().HIncrBy(s.DB(), args); err != nil { return toRespError(err) } else { return redis.NewInt(v), nil } }
// HLEN key func HLenCmd(s Session, args [][]byte) (redis.Resp, error) { if n, err := s.Store().HLen(s.DB(), args); err != nil { return toRespError(err) } else { return redis.NewInt(n), nil } }
// HEXISTS key field func HExistsCmd(s Session, args [][]byte) (redis.Resp, error) { if x, err := s.Store().HExists(s.DB(), args); err != nil { return toRespError(err) } else { return redis.NewInt(x), nil } }
// ZREMRANGEBYSCORE key min max func ZRemRangeByScoreCmd(s Session, args [][]byte) (redis.Resp, error) { if v, err := s.Store().ZRemRangeByScore(s.DB(), args); err != nil { return toRespError(err) } else { return redis.NewInt(v), nil } }
// ZREVRANK key member func ZRevRankCmd(s Session, args [][]byte) (redis.Resp, error) { if v, err := s.Store().ZRevRank(s.DB(), args); err != nil { return toRespError(err) } else if v >= 0 { return redis.NewInt(v), nil } else { return redis.NewBulkBytes(nil), nil } }
func RegisterIntReply(name string, f CommandIntFunc, flag CommandFlag) { v := func(s Session, args [][]byte) (redis.Resp, error) { r, err := f(s, args) if err != nil { return toRespError(err) } return redis.NewInt(r), nil } register(name, v, flag) }
func (pc *testPoolConn) checkInt(c *C, expect int64, cmd string, args ...interface{}) { resp := pc.doCmd(c, cmd, args...) c.Assert(resp, DeepEquals, redis.NewInt(expect)) }