68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
// Commands from https://redis.io/commands#cluster
|
|
|
|
package miniredis
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/alicebob/miniredis/v2/server"
|
|
)
|
|
|
|
// commandsCluster handles some cluster operations.
|
|
func commandsCluster(m *Miniredis) {
|
|
m.srv.Register("CLUSTER", m.cmdCluster)
|
|
}
|
|
|
|
func (m *Miniredis) cmdCluster(c *server.Peer, cmd string, args []string) {
|
|
if !m.handleAuth(c) {
|
|
return
|
|
}
|
|
|
|
if len(args) < 1 {
|
|
setDirty(c)
|
|
c.WriteError(errWrongNumber(cmd))
|
|
return
|
|
}
|
|
switch strings.ToUpper(args[0]) {
|
|
case "SLOTS":
|
|
m.cmdClusterSlots(c, cmd, args)
|
|
case "KEYSLOT":
|
|
m.cmdClusterKeySlot(c, cmd, args)
|
|
case "NODES":
|
|
m.cmdClusterNodes(c, cmd, args)
|
|
default:
|
|
setDirty(c)
|
|
c.WriteError(fmt.Sprintf("ERR 'CLUSTER %s' not supported", strings.Join(args, " ")))
|
|
return
|
|
}
|
|
}
|
|
|
|
// CLUSTER SLOTS
|
|
func (m *Miniredis) cmdClusterSlots(c *server.Peer, cmd string, args []string) {
|
|
withTx(m, c, func(c *server.Peer, ctx *connCtx) {
|
|
c.WriteLen(1)
|
|
c.WriteLen(3)
|
|
c.WriteInt(0)
|
|
c.WriteInt(16383)
|
|
c.WriteLen(3)
|
|
c.WriteBulk(m.srv.Addr().IP.String())
|
|
c.WriteInt(m.srv.Addr().Port)
|
|
c.WriteBulk("09dbe9720cda62f7865eabc5fd8857c5d2678366")
|
|
})
|
|
}
|
|
|
|
// CLUSTER KEYSLOT
|
|
func (m *Miniredis) cmdClusterKeySlot(c *server.Peer, cmd string, args []string) {
|
|
withTx(m, c, func(c *server.Peer, ctx *connCtx) {
|
|
c.WriteInt(163)
|
|
})
|
|
}
|
|
|
|
// CLUSTER NODES
|
|
func (m *Miniredis) cmdClusterNodes(c *server.Peer, cmd string, args []string) {
|
|
withTx(m, c, func(c *server.Peer, ctx *connCtx) {
|
|
c.WriteBulk("e7d1eecce10fd6bb5eb35b9f99a514335d9ba9ca 127.0.0.1:7000@7000 myself,master - 0 0 1 connected 0-16383")
|
|
})
|
|
}
|