Commit ed4cca1c authored by mdj33's avatar mdj33 Committed by vipwzw

add node group cmds

parent 2b9b5070
...@@ -539,8 +539,8 @@ func nodeList(cmd *cobra.Command, args []string) { ...@@ -539,8 +539,8 @@ func nodeList(cmd *cobra.Command, args []string) {
// GetNodeGroupCmd get node group addr // GetNodeGroupCmd get node group addr
func GetNodeGroupCmd() *cobra.Command { func GetNodeGroupCmd() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "nodegroup_list", Use: "nodegroup_addrs",
Short: "Get super node group list by title or status", Short: "Get super node group's addrs by title",
Run: nodeGroup, Run: nodeGroup,
} }
addNodeGroupCmdFlags(cmd) addNodeGroupCmdFlags(cmd)
...@@ -550,22 +550,72 @@ func GetNodeGroupCmd() *cobra.Command { ...@@ -550,22 +550,72 @@ func GetNodeGroupCmd() *cobra.Command {
func addNodeGroupCmdFlags(cmd *cobra.Command) { func addNodeGroupCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("title", "t", "", "parallel chain's title") cmd.Flags().StringP("title", "t", "", "parallel chain's title")
cmd.MarkFlagRequired("title") cmd.MarkFlagRequired("title")
}
func nodeGroup(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
title, _ := cmd.Flags().GetString("title")
var res types.ReplyConfig
ctx := jsonclient.NewRPCCtx(rpcLaddr, "paracross.GetNodeGroupAddrs", types.ReqString{Data: title}, &res)
ctx.Run()
}
// GetNodeGroupCmd get node group addr
func NodeGroupStatusCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "nodegroup_status",
Short: "query super node group apply status by title",
Run: nodeGroupStatus,
}
getNodeGroupStatusCmdFlags(cmd)
return cmd
}
func getNodeGroupStatusCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("title", "t", "", "parallel chain's title")
cmd.MarkFlagRequired("title")
}
func nodeGroupStatus(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
title, _ := cmd.Flags().GetString("title")
params := pt.ReqParacrossNodeInfo{
Title: title,
}
var res pt.ParaNodeAddrStatus
ctx := jsonclient.NewRPCCtx(rpcLaddr, "paracross.GetNodeGroupStatus", params, &res)
ctx.Run()
}
// GetNodeGroupCmd get node group addr
func NodeGroupListCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "nodegroup_list",
Short: "query super node group apply list by status",
Run: nodeGroupList,
}
getNodeGroupListCmdFlags(cmd)
return cmd
}
func getNodeGroupListCmdFlags(cmd *cobra.Command) {
cmd.Flags().Int32P("status", "s", 0, "status:1:apply,2:approve,3:quit") cmd.Flags().Int32P("status", "s", 0, "status:1:apply,2:approve,3:quit")
cmd.MarkFlagRequired("status") cmd.MarkFlagRequired("status")
} }
func nodeGroup(cmd *cobra.Command, args []string) { func nodeGroupList(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
title, _ := cmd.Flags().GetString("title")
status, _ := cmd.Flags().GetInt32("status") status, _ := cmd.Flags().GetInt32("status")
params := pt.ReqParacrossNodeInfo{ params := pt.ReqParacrossNodeInfo{
Title: title,
Status: status, Status: status,
} }
var res types.ReplyConfig var res pt.RespParacrossNodeAddrs
ctx := jsonclient.NewRPCCtx(rpcLaddr, "paracross.GetNodeGroup", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "paracross.ListNodeGroupStatus", params, &res)
ctx.Run() ctx.Run()
} }
...@@ -79,6 +79,29 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx * ...@@ -79,6 +79,29 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *
return &set, nil return &set, nil
} }
// ExecDelLocal_NodeGroupConfig node group config tx delete process
func (e *Paracross) ExecDelLocal_NodeGroupConfig(payload *pt.ParaNodeGroupApply, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet
for _, log := range receiptData.Logs {
if log.Ty == pt.TyLogParaNodeGroupApply || log.Ty == pt.TyLogParaNodeGroupApprove ||
log.Ty == pt.TyLogParaNodeGroupQuit {
var g pt.ReceiptParaNodeConfig
err := types.Decode(log.Log, &g)
if err != nil {
return nil, err
}
if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeGroupStatusTitle(g.Prev.Status, g.Current.Title), Value: types.Encode(g.Prev)})
}
set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeGroupStatusTitle(g.Current.Status, g.Current.Title), Value: nil})
}
}
return &set, nil
}
//ExecDelLocal_AssetTransfer asset transfer del local db process //ExecDelLocal_AssetTransfer asset transfer del local db process
func (e *Paracross) ExecDelLocal_AssetTransfer(payload *types.AssetsTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (e *Paracross) ExecDelLocal_AssetTransfer(payload *types.AssetsTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet var set types.LocalDBSet
......
...@@ -80,6 +80,29 @@ func (e *Paracross) ExecLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *typ ...@@ -80,6 +80,29 @@ func (e *Paracross) ExecLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *typ
return &set, nil return &set, nil
} }
//ExecLocal_NodeGroupConfig node group config add process
func (e *Paracross) ExecLocal_NodeGroupConfig(payload *pt.ParaNodeGroupApply, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet
for _, log := range receiptData.Logs {
if log.Ty == pt.TyLogParaNodeGroupApply || log.Ty == pt.TyLogParaNodeGroupApprove ||
log.Ty == pt.TyLogParaNodeGroupQuit {
var g pt.ReceiptParaNodeConfig
err := types.Decode(log.Log, &g)
if err != nil {
return nil, err
}
if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeGroupStatusTitle(g.Prev.Status, g.Current.Title), Value: nil})
}
set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeGroupStatusTitle(g.Current.Status, g.Current.Title), Value: types.Encode(g.Current)})
}
}
return &set, nil
}
//ExecLocal_AssetTransfer asset transfer local proc //ExecLocal_AssetTransfer asset transfer local proc
func (e *Paracross) ExecLocal_AssetTransfer(payload *types.AssetsTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (e *Paracross) ExecLocal_AssetTransfer(payload *types.AssetsTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet var set types.LocalDBSet
......
...@@ -23,6 +23,7 @@ var ( ...@@ -23,6 +23,7 @@ var (
localAssetKey string localAssetKey string
localNodeTitleStatus string localNodeTitleStatus string
localNodeTitleDone string localNodeTitleDone string
localNodeGroupStatusTitle string
) )
func setPrefix() { func setPrefix() {
...@@ -40,6 +41,8 @@ func setPrefix() { ...@@ -40,6 +41,8 @@ func setPrefix() {
localNodeTitleStatus = "LODB-paracross-nodesTitleStatus-" localNodeTitleStatus = "LODB-paracross-nodesTitleStatus-"
localNodeTitleDone = "LODB-paracross-nodesTitleDone-" localNodeTitleDone = "LODB-paracross-nodesTitleDone-"
localNodeGroupStatusTitle = "LODB-paracross-nodegroupStatusTitle-"
} }
func calcTitleKey(t string) []byte { func calcTitleKey(t string) []byte {
...@@ -98,3 +101,11 @@ func calcLocalNodeStatusPrefix(title string, status int32) []byte { ...@@ -98,3 +101,11 @@ func calcLocalNodeStatusPrefix(title string, status int32) []byte {
func calcLocalNodeTitleDone(title, addr string) []byte { func calcLocalNodeTitleDone(title, addr string) []byte {
return []byte(fmt.Sprintf(localNodeTitleDone+"%s-%s", title, addr)) return []byte(fmt.Sprintf(localNodeTitleDone+"%s-%s", title, addr))
} }
func calcLocalNodeGroupStatusTitle(status int32, title string) []byte {
return []byte(fmt.Sprintf(localNodeGroupStatusTitle+"%02d-%s", status, title))
}
func calcLocalNodeGroupStatusPrefix(status int32) []byte {
return []byte(fmt.Sprintf(localNodeGroupStatusTitle+"%02d", status))
}
...@@ -36,7 +36,7 @@ func (p *Paracross) Query_GetTitleByHash(in *pt.ReqParacrossTitleHash) (types.Me ...@@ -36,7 +36,7 @@ func (p *Paracross) Query_GetTitleByHash(in *pt.ReqParacrossTitleHash) (types.Me
} }
//Query_GetNodeGroup get node group addrs //Query_GetNodeGroup get node group addrs
func (p *Paracross) Query_GetNodeGroup(in *pt.ReqParacrossNodeInfo) (types.Message, error) { func (p *Paracross) Query_GetNodeGroupAddrs(in *pt.ReqParacrossNodeInfo) (types.Message, error) {
if in == nil { if in == nil {
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
...@@ -50,7 +50,7 @@ func (p *Paracross) Query_GetNodeGroup(in *pt.ReqParacrossNodeInfo) (types.Messa ...@@ -50,7 +50,7 @@ func (p *Paracross) Query_GetNodeGroup(in *pt.ReqParacrossNodeInfo) (types.Messa
nodes = append(nodes, k) nodes = append(nodes, k)
} }
var reply types.ReplyConfig var reply types.ReplyConfig
reply.Key = string(key) reply.Key = string(in.GetTitle() + " all addrs")
reply.Value = fmt.Sprint(nodes) reply.Value = fmt.Sprint(nodes)
return &reply, nil return &reply, nil
} }
...@@ -76,6 +76,27 @@ func (p *Paracross) Query_ListNodeStatusInfo(in *pt.ReqParacrossNodeInfo) (types ...@@ -76,6 +76,27 @@ func (p *Paracross) Query_ListNodeStatusInfo(in *pt.ReqParacrossNodeInfo) (types
return listLocalNodeStatus(p.GetLocalDB(), in.Title, in.Status) return listLocalNodeStatus(p.GetLocalDB(), in.Title, in.Status)
} }
//Query_GetNodeAddrInfo get specific node addr info
func (p *Paracross) Query_GetNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (types.Message, error) {
if in == nil || in.Title == "" {
return nil, types.ErrInvalidParam
}
key := calcParaNodeGroupApplyKey(in.Title)
stat, err := getNodeAddr(p.GetStateDB(), key)
if err != nil {
return nil, err
}
return stat, nil
}
//Query_ListNodeStatusInfo list node info by status
func (p *Paracross) Query_ListNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (types.Message, error) {
if in == nil || in.Status == 0 {
return nil, types.ErrInvalidParam
}
return listLocalNodeGroupStatus(p.GetLocalDB(), in.Status)
}
//Query_ListTitles query paracross titles list //Query_ListTitles query paracross titles list
func (p *Paracross) Query_ListTitles(in *types.ReqNil) (types.Message, error) { func (p *Paracross) Query_ListTitles(in *types.ReqNil) (types.Message, error) {
return p.paracrossListTitles() return p.paracrossListTitles()
...@@ -170,9 +191,7 @@ func listLocalTitles(db dbm.KVDB) (types.Message, error) { ...@@ -170,9 +191,7 @@ func listLocalTitles(db dbm.KVDB) (types.Message, error) {
return &resp, nil return &resp, nil
} }
//按状态遍历 func listNodeStatus(db dbm.KVDB, prefix []byte) (types.Message, error) {
func listLocalNodeStatus(db dbm.KVDB, title string, status int32) (types.Message, error) {
prefix := calcLocalNodeStatusPrefix(title, status)
res, err := db.List(prefix, []byte(""), 0, 1) res, err := db.List(prefix, []byte(""), 0, 1)
if err != nil { if err != nil {
return nil, err return nil, err
...@@ -188,7 +207,17 @@ func listLocalNodeStatus(db dbm.KVDB, title string, status int32) (types.Message ...@@ -188,7 +207,17 @@ func listLocalNodeStatus(db dbm.KVDB, title string, status int32) (types.Message
resp.Addrs = append(resp.Addrs, &st) resp.Addrs = append(resp.Addrs, &st)
} }
return &resp, nil return &resp, nil
}
//按状态遍历
func listLocalNodeStatus(db dbm.KVDB, title string, status int32) (types.Message, error) {
prefix := calcLocalNodeStatusPrefix(title, status)
return listNodeStatus(db, prefix)
}
func listLocalNodeGroupStatus(db dbm.KVDB, status int32) (types.Message, error) {
prefix := calcLocalNodeGroupStatusPrefix(status)
return listNodeStatus(db, prefix)
} }
func loadLocalTitle(db dbm.KV, title string, height int64) (types.Message, error) { func loadLocalTitle(db dbm.KV, title string, height int64) (types.Message, error) {
......
...@@ -625,7 +625,7 @@ func (a *action) nodeGroupApply(config *pt.ParaNodeGroupApply) (*types.Receipt, ...@@ -625,7 +625,7 @@ func (a *action) nodeGroupApply(config *pt.ParaNodeGroupApply) (*types.Receipt,
ApplyAddr: strings.Join(addrs, ","), ApplyAddr: strings.Join(addrs, ","),
CoinsFrozen: config.CoinsFrozen} CoinsFrozen: config.CoinsFrozen}
saveNodeAddr(a.db, key, stat) saveNodeAddr(a.db, key, stat)
r := makeParaNodeGroupApplyReiceipt(config.Title, a.fromaddr, nil, stat, pt.TyLogParaNodeGroupApply) r := makeParaNodeGroupApplyReiceipt(config.Title, a.fromaddr, status, stat, pt.TyLogParaNodeGroupApply)
receipt.KV = append(receipt.KV, r.KV...) receipt.KV = append(receipt.KV, r.KV...)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
...@@ -664,7 +664,7 @@ func (a *action) nodeGroupQuit(config *pt.ParaNodeGroupApply) (*types.Receipt, e ...@@ -664,7 +664,7 @@ func (a *action) nodeGroupQuit(config *pt.ParaNodeGroupApply) (*types.Receipt, e
ApplyAddr: status.ApplyAddr, ApplyAddr: status.ApplyAddr,
CoinsFrozen: status.CoinsFrozen} CoinsFrozen: status.CoinsFrozen}
saveNodeAddr(a.db, key, stat) saveNodeAddr(a.db, key, stat)
r := makeParaNodeGroupApplyReiceipt(config.Title, a.fromaddr, nil, stat, pt.TyLogParaNodeGroupQuit) r := makeParaNodeGroupApplyReiceipt(config.Title, a.fromaddr, status, stat, pt.TyLogParaNodeGroupQuit)
receipt.KV = append(receipt.KV, r.KV...) receipt.KV = append(receipt.KV, r.KV...)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
......
...@@ -168,10 +168,50 @@ func (c *Jrpc) GetBlock2MainInfo(req *types.ReqBlocks, result *interface{}) erro ...@@ -168,10 +168,50 @@ func (c *Jrpc) GetBlock2MainInfo(req *types.ReqBlocks, result *interface{}) erro
return err return err
} }
// GetNodeStatus get super node status
func (c *channelClient) GetNodeStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.ParaNodeAddrStatus, error) {
r := *req
data, err := c.Query(pt.GetExecName(), "GetNodeAddrInfo", &r)
if err != nil {
return nil, err
}
if resp, ok := data.(*pt.ParaNodeAddrStatus); ok {
return resp, nil
}
return nil, types.ErrDecode
}
// GetNodeStatus get super node status
func (c *Jrpc) GetNodeStatus(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.GetNodeStatus(context.Background(), req)
*result = data
return err
}
//ListNodeStatus list super node by status
func (c *channelClient) ListNodeStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.RespParacrossNodeAddrs, error) {
r := *req
data, err := c.Query(pt.GetExecName(), "ListNodeStatusInfo", &r)
if err != nil {
return nil, err
}
if resp, ok := data.(*pt.RespParacrossNodeAddrs); ok {
return resp, nil
}
return nil, types.ErrDecode
}
//ListNodeStatus list super node by status
func (c *Jrpc) ListNodeStatus(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.ListNodeStatus(context.Background(), req)
*result = data
return err
}
// GetNodeGroup get super node group // GetNodeGroup get super node group
func (c *channelClient) GetNodeGroup(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*types.ReplyConfig, error) { func (c *channelClient) GetNodeGroupAddrs(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*types.ReplyConfig, error) {
r := *req r := *req
data, err := c.Query(pt.GetExecName(), "GetNodeGroup", &r) data, err := c.Query(pt.GetExecName(), "GetNodeGroupAddrs", &r)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -182,16 +222,16 @@ func (c *channelClient) GetNodeGroup(ctx context.Context, req *pt.ReqParacrossNo ...@@ -182,16 +222,16 @@ func (c *channelClient) GetNodeGroup(ctx context.Context, req *pt.ReqParacrossNo
} }
// GetNodeGroup get super node group // GetNodeGroup get super node group
func (c *Jrpc) GetNodeGroup(req *pt.ReqParacrossNodeInfo, result *interface{}) error { func (c *Jrpc) GetNodeGroupAddrs(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.GetNodeGroup(context.Background(), req) data, err := c.cli.GetNodeGroupAddrs(context.Background(), req)
*result = data *result = data
return err return err
} }
// GetNodeStatus get super node status // GetNodeGroup get super node group
func (c *channelClient) GetNodeStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.ParaNodeAddrStatus, error) { func (c *channelClient) GetNodeGroupStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.ParaNodeAddrStatus, error) {
r := *req r := *req
data, err := c.Query(pt.GetExecName(), "GetNodeAddrInfo", &r) data, err := c.Query(pt.GetExecName(), "GetNodeGroupStatus", &r)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -201,17 +241,17 @@ func (c *channelClient) GetNodeStatus(ctx context.Context, req *pt.ReqParacrossN ...@@ -201,17 +241,17 @@ func (c *channelClient) GetNodeStatus(ctx context.Context, req *pt.ReqParacrossN
return nil, types.ErrDecode return nil, types.ErrDecode
} }
// GetNodeStatus get super node status // GetNodeGroup get super node group
func (c *Jrpc) GetNodeStatus(req *pt.ReqParacrossNodeInfo, result *interface{}) error { func (c *Jrpc) GetNodeGroupStatus(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.GetNodeStatus(context.Background(), req) data, err := c.cli.GetNodeGroupStatus(context.Background(), req)
*result = data *result = data
return err return err
} }
//ListNodeStatus list super node by status //ListNodeStatus list super node by status
func (c *channelClient) ListNodeStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.RespParacrossNodeAddrs, error) { func (c *channelClient) ListNodeGroupStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.RespParacrossNodeAddrs, error) {
r := *req r := *req
data, err := c.Query(pt.GetExecName(), "ListNodeStatusInfo", &r) data, err := c.Query(pt.GetExecName(), "ListNodeGroupStatusInfo", &r)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -222,8 +262,8 @@ func (c *channelClient) ListNodeStatus(ctx context.Context, req *pt.ReqParacross ...@@ -222,8 +262,8 @@ func (c *channelClient) ListNodeStatus(ctx context.Context, req *pt.ReqParacross
} }
//ListNodeStatus list super node by status //ListNodeStatus list super node by status
func (c *Jrpc) ListNodeStatus(req *pt.ReqParacrossNodeInfo, result *interface{}) error { func (c *Jrpc) ListNodeGroupStatus(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.ListNodeStatus(context.Background(), req) data, err := c.cli.ListNodeGroupStatus(context.Background(), req)
*result = data *result = data
return err return err
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment