lotus-miner sectors expired --remove-expired
This commit is contained in:
parent
d1759a4335
commit
ccf8844689
@ -1519,12 +1519,25 @@ var sectorsUpdateCmd = &cli.Command{
|
|||||||
var sectorsExpiredCmd = &cli.Command{
|
var sectorsExpiredCmd = &cli.Command{
|
||||||
Name: "expired",
|
Name: "expired",
|
||||||
Usage: "Get or cleanup expired sectors",
|
Usage: "Get or cleanup expired sectors",
|
||||||
ArgsUsage: "<sectorNum>",
|
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "show-removed",
|
Name: "show-removed",
|
||||||
Usage: "show removed sectors",
|
Usage: "show removed sectors",
|
||||||
},
|
},
|
||||||
|
&cli.BoolFlag{
|
||||||
|
Name: "remove-expired",
|
||||||
|
Usage: "remove expired sectors",
|
||||||
|
},
|
||||||
|
|
||||||
|
&cli.Int64Flag{
|
||||||
|
Name: "confirm-remove-count",
|
||||||
|
Hidden: true,
|
||||||
|
},
|
||||||
|
&cli.Int64Flag{
|
||||||
|
Name: "expired-epoch",
|
||||||
|
Usage: "epoch at which to check sector expirations",
|
||||||
|
DefaultText: "WinningPoSt lookback epoch",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Action: func(cctx *cli.Context) error {
|
Action: func(cctx *cli.Context) error {
|
||||||
nodeApi, closer, err := lcli.GetStorageMinerAPI(cctx)
|
nodeApi, closer, err := lcli.GetStorageMinerAPI(cctx)
|
||||||
@ -1563,15 +1576,22 @@ var sectorsExpiredCmd = &cli.Command{
|
|||||||
return xerrors.Errorf("getting chain head: %w", err)
|
return xerrors.Errorf("getting chain head: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lbEpoch := abi.ChainEpoch(cctx.Int64("expired-epoch"))
|
||||||
|
if !cctx.IsSet("expired-epoch") {
|
||||||
nv, err := fullApi.StateNetworkVersion(ctx, head.Key())
|
nv, err := fullApi.StateNetworkVersion(ctx, head.Key())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("getting network version: %w", err)
|
return xerrors.Errorf("getting network version: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
lbEpoch := head.Height() - policy.GetWinningPoStSectorSetLookback(nv)
|
lbEpoch = head.Height() - policy.GetWinningPoStSectorSetLookback(nv)
|
||||||
if lbEpoch < 0 {
|
if lbEpoch < 0 {
|
||||||
return xerrors.Errorf("too early to terminate sectors")
|
return xerrors.Errorf("too early to terminate sectors")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if cctx.IsSet("confirm-remove-count") && !cctx.IsSet("expired-epoch") {
|
||||||
|
return xerrors.Errorf("--expired-epoch must be specified with --confirm-remove-count")
|
||||||
|
}
|
||||||
|
|
||||||
lbts, err := fullApi.ChainGetTipSetByHeight(ctx, lbEpoch, head.Key())
|
lbts, err := fullApi.ChainGetTipSetByHeight(ctx, lbEpoch, head.Key())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1611,9 +1631,15 @@ var sectorsExpiredCmd = &cli.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cctx.Bool("remove-expired") {
|
||||||
|
color.Red("Removing sectors:\n")
|
||||||
|
}
|
||||||
|
|
||||||
// toCheck now only contains sectors which either failed to precommit or are expired/terminated
|
// toCheck now only contains sectors which either failed to precommit or are expired/terminated
|
||||||
fmt.Printf("Sector\tState\tExpiration\n")
|
fmt.Printf("Sector\tState\tExpiration\n")
|
||||||
|
|
||||||
|
var toRemove []abi.SectorNumber
|
||||||
|
|
||||||
err = toCheck.ForEach(func(u uint64) error {
|
err = toCheck.ForEach(func(u uint64) error {
|
||||||
s := abi.SectorNumber(u)
|
s := abi.SectorNumber(u)
|
||||||
|
|
||||||
@ -1623,11 +1649,17 @@ var sectorsExpiredCmd = &cli.Command{
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if !cctx.Bool("show-removed") && st.State == api.SectorState(sealing.Removed) {
|
rmMsg := ""
|
||||||
|
|
||||||
|
if st.State == api.SectorState(sealing.Removed) {
|
||||||
|
if cctx.IsSet("confirm-remove-count") || !cctx.Bool("show-removed") {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
} else { // not removed
|
||||||
|
toRemove = append(toRemove, s)
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Printf("%d:\t%s\t%s\n", s, st.State, lcli.EpochTime(head.Height(), st.Expiration))
|
fmt.Printf("%d%s\t%s\t%s\n", s, rmMsg, st.State, lcli.EpochTime(head.Height(), st.Expiration))
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
@ -1635,6 +1667,34 @@ var sectorsExpiredCmd = &cli.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cctx.Bool("remove-expired") {
|
||||||
|
if !cctx.IsSet("confirm-remove-count") {
|
||||||
|
fmt.Println()
|
||||||
|
fmt.Println(color.YellowString("All"), color.GreenString("%d", len(toRemove)), color.YellowString("sectors listed above will be removed\n"))
|
||||||
|
fmt.Println(color.YellowString("To confirm removal of the above sectors, including\n all related sealed and unsealed data, run:\n"))
|
||||||
|
fmt.Println(color.RedString("lotus-miner sectors expired --remove-expired --confirm-remove-count=%d --expired-epoch=%d\n", len(toRemove), lbts.Height()))
|
||||||
|
fmt.Println(color.YellowString("WARNING: This operation is irreversible"))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println()
|
||||||
|
|
||||||
|
if int64(len(toRemove)) != cctx.Int64("confirm-remove-count") {
|
||||||
|
return xerrors.Errorf("value of confirm-remove-count doesn't match the number of sectors which can be removed (%d)", len(toRemove))
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, number := range toRemove {
|
||||||
|
fmt.Printf("Removing sector\t%s:\t", color.YellowString("%d", number))
|
||||||
|
|
||||||
|
err := nodeApi.SectorRemove(ctx, number)
|
||||||
|
if err != nil {
|
||||||
|
color.Red("ERROR: %s\n", err.Error())
|
||||||
|
} else {
|
||||||
|
color.Green("OK\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1472,6 +1472,7 @@ COMMANDS:
|
|||||||
update-state ADVANCED: manually update the state of a sector, this may aid in error recovery
|
update-state ADVANCED: manually update the state of a sector, this may aid in error recovery
|
||||||
pledge store random data in a sector
|
pledge store random data in a sector
|
||||||
check-expire Inspect expiring sectors
|
check-expire Inspect expiring sectors
|
||||||
|
expired Get or cleanup expired sectors
|
||||||
renew Renew expiring sectors while not exceeding each sector's max life
|
renew Renew expiring sectors while not exceeding each sector's max life
|
||||||
extend Extend sector expiration
|
extend Extend sector expiration
|
||||||
terminate Terminate sector on-chain then remove (WARNING: This means losing power and collateral for the removed sector)
|
terminate Terminate sector on-chain then remove (WARNING: This means losing power and collateral for the removed sector)
|
||||||
@ -1577,6 +1578,22 @@ OPTIONS:
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### lotus-miner sectors expired
|
||||||
|
```
|
||||||
|
NAME:
|
||||||
|
lotus-miner sectors expired - Get or cleanup expired sectors
|
||||||
|
|
||||||
|
USAGE:
|
||||||
|
lotus-miner sectors expired [command options] [arguments...]
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
--show-removed show removed sectors (default: false)
|
||||||
|
--remove-expired remove expired sectors (default: false)
|
||||||
|
--expired-epoch value epoch at which to check sector expirations (default: WinningPoSt lookback epoch)
|
||||||
|
--help, -h show help (default: false)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
### lotus-miner sectors renew
|
### lotus-miner sectors renew
|
||||||
```
|
```
|
||||||
NAME:
|
NAME:
|
||||||
|
Loading…
Reference in New Issue
Block a user