@@ -31,6 +31,8 @@ func (m *Miniredis) cmdCluster(c *server.Peer, cmd string, args []string) {
3131 m .cmdClusterKeySlot (c , cmd , args )
3232 case "NODES" :
3333 m .cmdClusterNodes (c , cmd , args )
34+ case "SHARDS" :
35+ m .cmdClusterShards (c , cmd , args )
3436 default :
3537 setDirty (c )
3638 c .WriteError (fmt .Sprintf ("ERR 'CLUSTER %s' not supported" , strings .Join (args , " " )))
@@ -68,3 +70,53 @@ func (m *Miniredis) cmdClusterNodes(c *server.Peer, cmd string, args []string) {
6870 c .WriteBulk (fmt .Sprintf ("e7d1eecce10fd6bb5eb35b9f99a514335d9ba9ca %s@%d myself,master - 0 0 1 connected 0-16383" , addr , port ))
6971 })
7072}
73+
74+ // CLUSTER SHARDS
75+ func (m * Miniredis ) cmdClusterShards (c * server.Peer , cmd string , args []string ) {
76+ withTx (m , c , func (c * server.Peer , ctx * connCtx ) {
77+ addr := m .srv .Addr ()
78+ host := addr .IP .String ()
79+ port := addr .Port
80+
81+ // Array of shards (we return 1 shard)
82+ c .WriteLen (1 )
83+
84+ // Shard is a map with 2 keys: "slots" and "nodes"
85+ c .WriteMapLen (2 )
86+
87+ // "slots": flat list of start/end pairs (inclusive ranges)
88+ c .WriteBulk ("slots" )
89+ c .WriteLen (2 )
90+ c .WriteInt (0 )
91+ c .WriteInt (16383 )
92+
93+ // "nodes": array of node maps
94+ c .WriteBulk ("nodes" )
95+ c .WriteLen (1 )
96+
97+ // Node map.
98+ // (id, endpoint, ip, port, role, replication-offset, health)
99+ c .WriteMapLen (6 )
100+
101+ c .WriteBulk ("id" )
102+ c .WriteBulk ("13f84e686106847b76671957dd348fde540a77bb" )
103+
104+ //c.WriteBulk("endpoint")
105+ //c.WriteBulk(host) // or host:port if your client expects that
106+
107+ c .WriteBulk ("ip" )
108+ c .WriteBulk (host )
109+
110+ c .WriteBulk ("port" )
111+ c .WriteInt (port )
112+
113+ c .WriteBulk ("role" )
114+ c .WriteBulk ("master" )
115+
116+ c .WriteBulk ("replication-offset" )
117+ c .WriteInt (0 )
118+
119+ c .WriteBulk ("health" )
120+ c .WriteBulk ("online" )
121+ })
122+ }
0 commit comments