mirror of https://github.com/go-redis/redis.git
Merge pull request #449 from go-redis/fix/use-first-slot-when-there-are-no-keys
Use first slot/shard when key is not defined.
This commit is contained in:
commit
b49d47eb4d
17
cluster.go
17
cluster.go
|
@ -258,10 +258,10 @@ func newClusterState(nodes *clusterNodes, slots []ClusterSlot) (*clusterState, e
|
|||
|
||||
func (c *clusterState) slotMasterNode(slot int) (*clusterNode, error) {
|
||||
nodes := c.slotNodes(slot)
|
||||
if len(nodes) == 0 {
|
||||
return c.nodes.Random()
|
||||
if len(nodes) > 0 {
|
||||
return nodes[0], nil
|
||||
}
|
||||
return nodes[0], nil
|
||||
return c.nodes.Random()
|
||||
}
|
||||
|
||||
func (c *clusterState) slotSlaveNode(slot int) (*clusterNode, error) {
|
||||
|
@ -364,15 +364,16 @@ func (c *ClusterClient) state() *clusterState {
|
|||
}
|
||||
|
||||
func (c *ClusterClient) cmdSlotAndNode(state *clusterState, cmd Cmder) (int, *clusterNode, error) {
|
||||
if state == nil {
|
||||
node, err := c.nodes.Random()
|
||||
return 0, node, err
|
||||
}
|
||||
|
||||
cmdInfo := c.cmds[cmd.arg(0)]
|
||||
firstKey := cmd.arg(cmdFirstKeyPos(cmd, cmdInfo))
|
||||
if firstKey == "" || cmdInfo == nil {
|
||||
node, err := c.nodes.Random()
|
||||
return -1, node, err
|
||||
}
|
||||
slot := hashtag.Slot(firstKey)
|
||||
|
||||
if cmdInfo.ReadOnly && c.opt.ReadOnly {
|
||||
if cmdInfo != nil && cmdInfo.ReadOnly && c.opt.ReadOnly {
|
||||
if c.opt.RouteByLatency {
|
||||
node, err := state.slotClosestNode(slot)
|
||||
return slot, node, err
|
||||
|
|
3
ring.go
3
ring.go
|
@ -267,9 +267,6 @@ func (c *Ring) shardByName(name string) (*ringShard, error) {
|
|||
func (c *Ring) cmdShard(cmd Cmder) (*ringShard, error) {
|
||||
cmdInfo := c.cmdInfo(cmd.arg(0))
|
||||
firstKey := cmd.arg(cmdFirstKeyPos(cmd, cmdInfo))
|
||||
if firstKey == "" {
|
||||
return c.randomShard()
|
||||
}
|
||||
return c.shardByKey(firstKey)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue