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
......
...@@ -11,18 +11,19 @@ import ( ...@@ -11,18 +11,19 @@ import (
) )
var ( var (
title string title string
titleHeight string titleHeight string
managerConfigNodes string //manager 合约配置的nodes managerConfigNodes string //manager 合约配置的nodes
paraConfigNodes string //平行链自组织配置的nodes,最初是从manager同步过来 paraConfigNodes string //平行链自组织配置的nodes,最初是从manager同步过来
paraConfigNodeAddr string //平行链配置节点账户 paraConfigNodeAddr string //平行链配置节点账户
paraNodeGroupApplyAddrs string paraNodeGroupApplyAddrs string
localTx string localTx string
localTitle string localTitle string
localTitleHeight string localTitleHeight string
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