in server/api/shard.go [58:91]
func (handler *ShardHandler) Create(c *gin.Context) {
ns := c.Param("namespace")
var req struct {
Nodes []string `json:"nodes" validate:"required"`
Password string `json:"password"`
}
if err := c.BindJSON(&req); err != nil {
helper.ResponseBadRequest(c, err)
return
}
if len(req.Nodes) == 0 {
helper.ResponseBadRequest(c, errors.New("nodes should NOT be empty"))
return
}
nodes := make([]store.Node, 0, len(req.Nodes))
for i, addr := range req.Nodes {
node := store.NewClusterNode(addr, req.Password)
if i == 0 {
node.SetRole(store.RoleMaster)
} else {
node.SetRole(store.RoleSlave)
}
nodes = append(nodes, node)
}
cluster, _ := c.MustGet(consts.ContextKeyCluster).(*store.Cluster)
newShard := store.NewShard()
newShard.Nodes = nodes
cluster.Shards = append(cluster.Shards, newShard)
if err := handler.s.UpdateCluster(c, ns, cluster); err != nil {
helper.ResponseError(c, err)
return
}
helper.ResponseCreated(c, gin.H{"shard": newShard})
}