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) {
// GetNodeGroupCmd get node group addr
func GetNodeGroupCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "nodegroup_list",
Short: "Get super node group list by title or status",
Use: "nodegroup_addrs",
Short: "Get super node group's addrs by title",
Run: nodeGroup,
}
addNodeGroupCmdFlags(cmd)
......@@ -550,22 +550,72 @@ func GetNodeGroupCmd() *cobra.Command {
func addNodeGroupCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("title", "t", "", "parallel chain's 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.MarkFlagRequired("status")
}
func nodeGroup(cmd *cobra.Command, args []string) {
func nodeGroupList(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
title, _ := cmd.Flags().GetString("title")
status, _ := cmd.Flags().GetInt32("status")
params := pt.ReqParacrossNodeInfo{
Title: title,
Status: status,
}
var res types.ReplyConfig
ctx := jsonclient.NewRPCCtx(rpcLaddr, "paracross.GetNodeGroup", params, &res)
var res pt.RespParacrossNodeAddrs
ctx := jsonclient.NewRPCCtx(rpcLaddr, "paracross.ListNodeGroupStatus", params, &res)
ctx.Run()
}
......@@ -79,6 +79,29 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *
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
func (e *Paracross) ExecDelLocal_AssetTransfer(payload *types.AssetsTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet
......
......@@ -80,6 +80,29 @@ func (e *Paracross) ExecLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *typ
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
func (e *Paracross) ExecLocal_AssetTransfer(payload *types.AssetsTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet
......
......@@ -11,18 +11,19 @@ import (
)
var (
title string
titleHeight string
managerConfigNodes string //manager 合约配置的nodes
paraConfigNodes string //平行链自组织配置的nodes,最初是从manager同步过来
paraConfigNodeAddr string //平行链配置节点账户
paraNodeGroupApplyAddrs string
localTx string
localTitle string
localTitleHeight string
localAssetKey string
localNodeTitleStatus string
localNodeTitleDone string
title string
titleHeight string
managerConfigNodes string //manager 合约配置的nodes
paraConfigNodes string //平行链自组织配置的nodes,最初是从manager同步过来
paraConfigNodeAddr string //平行链配置节点账户
paraNodeGroupApplyAddrs string
localTx string
localTitle string
localTitleHeight string
localAssetKey string
localNodeTitleStatus string
localNodeTitleDone string
localNodeGroupStatusTitle string
)
func setPrefix() {
......@@ -40,6 +41,8 @@ func setPrefix() {
localNodeTitleStatus = "LODB-paracross-nodesTitleStatus-"
localNodeTitleDone = "LODB-paracross-nodesTitleDone-"
localNodeGroupStatusTitle = "LODB-paracross-nodegroupStatusTitle-"
}
func calcTitleKey(t string) []byte {
......@@ -98,3 +101,11 @@ func calcLocalNodeStatusPrefix(title string, status int32) []byte {
func calcLocalNodeTitleDone(title, addr string) []byte {
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
}
//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 {
return nil, types.ErrInvalidParam
}
......@@ -50,7 +50,7 @@ func (p *Paracross) Query_GetNodeGroup(in *pt.ReqParacrossNodeInfo) (types.Messa
nodes = append(nodes, k)
}
var reply types.ReplyConfig
reply.Key = string(key)
reply.Key = string(in.GetTitle() + " all addrs")
reply.Value = fmt.Sprint(nodes)
return &reply, nil
}
......@@ -76,6 +76,27 @@ func (p *Paracross) Query_ListNodeStatusInfo(in *pt.ReqParacrossNodeInfo) (types
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
func (p *Paracross) Query_ListTitles(in *types.ReqNil) (types.Message, error) {
return p.paracrossListTitles()
......@@ -170,9 +191,7 @@ func listLocalTitles(db dbm.KVDB) (types.Message, error) {
return &resp, nil
}
//按状态遍历
func listLocalNodeStatus(db dbm.KVDB, title string, status int32) (types.Message, error) {
prefix := calcLocalNodeStatusPrefix(title, status)
func listNodeStatus(db dbm.KVDB, prefix []byte) (types.Message, error) {
res, err := db.List(prefix, []byte(""), 0, 1)
if err != nil {
return nil, err
......@@ -188,7 +207,17 @@ func listLocalNodeStatus(db dbm.KVDB, title string, status int32) (types.Message
resp.Addrs = append(resp.Addrs, &st)
}
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) {
......
......@@ -625,7 +625,7 @@ func (a *action) nodeGroupApply(config *pt.ParaNodeGroupApply) (*types.Receipt,
ApplyAddr: strings.Join(addrs, ","),
CoinsFrozen: config.CoinsFrozen}
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.Logs = append(receipt.Logs, r.Logs...)
......@@ -664,7 +664,7 @@ func (a *action) nodeGroupQuit(config *pt.ParaNodeGroupApply) (*types.Receipt, e
ApplyAddr: status.ApplyAddr,
CoinsFrozen: status.CoinsFrozen}
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.Logs = append(receipt.Logs, r.Logs...)
......
......@@ -168,10 +168,50 @@ func (c *Jrpc) GetBlock2MainInfo(req *types.ReqBlocks, result *interface{}) erro
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
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
data, err := c.Query(pt.GetExecName(), "GetNodeGroup", &r)
data, err := c.Query(pt.GetExecName(), "GetNodeGroupAddrs", &r)
if err != nil {
return nil, err
}
......@@ -182,16 +222,16 @@ func (c *channelClient) GetNodeGroup(ctx context.Context, req *pt.ReqParacrossNo
}
// GetNodeGroup get super node group
func (c *Jrpc) GetNodeGroup(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.GetNodeGroup(context.Background(), req)
func (c *Jrpc) GetNodeGroupAddrs(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.GetNodeGroupAddrs(context.Background(), req)
*result = data
return err
}
// GetNodeStatus get super node status
func (c *channelClient) GetNodeStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.ParaNodeAddrStatus, error) {
// GetNodeGroup get super node group
func (c *channelClient) GetNodeGroupStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.ParaNodeAddrStatus, error) {
r := *req
data, err := c.Query(pt.GetExecName(), "GetNodeAddrInfo", &r)
data, err := c.Query(pt.GetExecName(), "GetNodeGroupStatus", &r)
if err != nil {
return nil, err
}
......@@ -201,17 +241,17 @@ func (c *channelClient) GetNodeStatus(ctx context.Context, req *pt.ReqParacrossN
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)
// GetNodeGroup get super node group
func (c *Jrpc) GetNodeGroupStatus(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.GetNodeGroupStatus(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) {
func (c *channelClient) ListNodeGroupStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.RespParacrossNodeAddrs, error) {
r := *req
data, err := c.Query(pt.GetExecName(), "ListNodeStatusInfo", &r)
data, err := c.Query(pt.GetExecName(), "ListNodeGroupStatusInfo", &r)
if err != nil {
return nil, err
}
......@@ -222,8 +262,8 @@ func (c *channelClient) ListNodeStatus(ctx context.Context, req *pt.ReqParacross
}
//ListNodeStatus list super node by status
func (c *Jrpc) ListNodeStatus(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.ListNodeStatus(context.Background(), req)
func (c *Jrpc) ListNodeGroupStatus(req *pt.ReqParacrossNodeInfo, result *interface{}) error {
data, err := c.cli.ListNodeGroupStatus(context.Background(), req)
*result = data
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