From 7417a13be322bc46a78c3304801157dfc40eb5e9 Mon Sep 17 00:00:00 2001 From: chadwick2143 Date: Tue, 16 Mar 2021 14:09:46 +0800 Subject: [PATCH] Add --actor flag in lotus-shed sectors terminate Can specify miner actor address when terminate sectors, so that you can terminate sectors without miner api. --- cmd/lotus-shed/sectors.go | 69 +++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/cmd/lotus-shed/sectors.go b/cmd/lotus-shed/sectors.go index 64f3faf79..6cf6ee86e 100644 --- a/cmd/lotus-shed/sectors.go +++ b/cmd/lotus-shed/sectors.go @@ -6,6 +6,7 @@ import ( "golang.org/x/xerrors" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" @@ -34,6 +35,10 @@ var terminateSectorCmd = &cli.Command{ Usage: "Forcefully terminate a sector (WARNING: This means losing power and pay a one-time termination penalty(including collateral) for the terminated sector)", ArgsUsage: "[sectorNum1 sectorNum2 ...]", Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "actor", + Usage: "specify the address of miner actor", + }, &cli.BoolFlag{ Name: "really-do-it", Usage: "pass this flag if you know what you are doing", @@ -44,6 +49,15 @@ var terminateSectorCmd = &cli.Command{ return fmt.Errorf("at least one sector must be specified") } + var maddr address.Address + if act := cctx.String("actor"); act != "" { + var err error + maddr, err = address.NewFromString(act) + if err != nil { + return fmt.Errorf("parsing address %s: %w", act, err) + } + } + if !cctx.Bool("really-do-it") { return fmt.Errorf("this is a command for advanced users, only use it if you are sure of what you are doing") } @@ -54,17 +68,19 @@ var terminateSectorCmd = &cli.Command{ } defer closer() - api, acloser, err := lcli.GetStorageMinerAPI(cctx) - if err != nil { - return err - } - defer acloser() - ctx := lcli.ReqContext(cctx) - maddr, err := api.ActorAddress(ctx) - if err != nil { - return err + if maddr.Empty() { + api, acloser, err := lcli.GetStorageMinerAPI(cctx) + if err != nil { + return err + } + defer acloser() + + maddr, err = api.ActorAddress(ctx) + if err != nil { + return err + } } mi, err := nodeApi.StateMinerInfo(ctx, maddr, types.EmptyTSK) @@ -147,28 +163,45 @@ var terminateSectorPenaltyEstimationCmd = &cli.Command{ Name: "termination-estimate", Usage: "Estimate the termination penalty", ArgsUsage: "[sectorNum1 sectorNum2 ...]", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "actor", + Usage: "specify the address of miner actor", + }, + }, Action: func(cctx *cli.Context) error { if cctx.Args().Len() < 1 { return fmt.Errorf("at least one sector must be specified") } + var maddr address.Address + if act := cctx.String("actor"); act != "" { + var err error + maddr, err = address.NewFromString(act) + if err != nil { + return fmt.Errorf("parsing address %s: %w", act, err) + } + } + nodeApi, closer, err := lcli.GetFullNodeAPI(cctx) if err != nil { return err } defer closer() - api, acloser, err := lcli.GetStorageMinerAPI(cctx) - if err != nil { - return err - } - defer acloser() - ctx := lcli.ReqContext(cctx) - maddr, err := api.ActorAddress(ctx) - if err != nil { - return err + if maddr.Empty() { + api, acloser, err := lcli.GetStorageMinerAPI(cctx) + if err != nil { + return err + } + defer acloser() + + maddr, err = api.ActorAddress(ctx) + if err != nil { + return err + } } mi, err := nodeApi.StateMinerInfo(ctx, maddr, types.EmptyTSK)