From 0554ca9943da7a04d6537a8b89b3f06ad605857d Mon Sep 17 00:00:00 2001 From: Aayush Date: Fri, 21 Jan 2022 12:39:18 -0500 Subject: [PATCH] feat: sealer: allow users to abort in-flight snap upgrades --- api/api_storage.go | 2 ++ api/proxy_gen.go | 13 ++++++++++++ build/openrpc/full.json.gz | Bin 25709 -> 25709 bytes build/openrpc/miner.json.gz | Bin 11633 -> 11709 bytes build/openrpc/worker.json.gz | Bin 3805 -> 3805 bytes cmd/lotus-miner/sectors.go | 26 +++++++++++++++++++++++ documentation/en/api-v0-methods-miner.md | 16 ++++++++++++++ documentation/en/cli-lotus-miner.md | 14 ++++++++++++ extern/storage-sealing/fsm.go | 7 ++++++ extern/storage-sealing/input.go | 7 ++++++ node/impl/storminer.go | 4 ++++ storage/miner_sealing.go | 4 ++++ 12 files changed, 93 insertions(+) diff --git a/api/api_storage.go b/api/api_storage.go index 6e6d75c28..58fb70635 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -113,6 +113,8 @@ type StorageMiner interface { // SectorCommitPending returns a list of pending Commit sectors to be sent in the next aggregate message SectorCommitPending(ctx context.Context) ([]abi.SectorID, error) //perm:admin SectorMatchPendingPiecesToOpenSectors(ctx context.Context) error //perm:admin + // SectorAbortUpgrade can be called on sectors that are in the process of being upgraded to abort it + SectorAbortUpgrade(context.Context, abi.SectorNumber) error //perm:admin // WorkerConnect tells the node to connect to workers RPC WorkerConnect(context.Context, string) error //perm:admin retry:true diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 63dc4aac8..32f59e0ec 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -747,6 +747,8 @@ type StorageMinerStruct struct { SealingSchedDiag func(p0 context.Context, p1 bool) (interface{}, error) `perm:"admin"` + SectorAbortUpgrade func(p0 context.Context, p1 abi.SectorNumber) error `perm:"admin"` + SectorAddPieceToAny func(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storage.Data, p3 PieceDealInfo) (SectorOffset, error) `perm:"admin"` SectorCommitFlush func(p0 context.Context) ([]sealiface.CommitBatchRes, error) `perm:"admin"` @@ -4402,6 +4404,17 @@ func (s *StorageMinerStub) SealingSchedDiag(p0 context.Context, p1 bool) (interf return nil, ErrNotSupported } +func (s *StorageMinerStruct) SectorAbortUpgrade(p0 context.Context, p1 abi.SectorNumber) error { + if s.Internal.SectorAbortUpgrade == nil { + return ErrNotSupported + } + return s.Internal.SectorAbortUpgrade(p0, p1) +} + +func (s *StorageMinerStub) SectorAbortUpgrade(p0 context.Context, p1 abi.SectorNumber) error { + return ErrNotSupported +} + func (s *StorageMinerStruct) SectorAddPieceToAny(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storage.Data, p3 PieceDealInfo) (SectorOffset, error) { if s.Internal.SectorAddPieceToAny == nil { return *new(SectorOffset), ErrNotSupported diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 5bf44f1a455a2cecb587e0a05fe009f7088e95c8..70cc388d1581b20137fc0e596cd36d17cc69c26e 100644 GIT binary patch delta 24745 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 delta 24772 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 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 0423aa9d0975322ca64edec4b584ec3fbd1ac921..633f24b680078dac285d8826832e5eb0791a43a1 100644 GIT binary patch literal 11709 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 4d79063430b0bcabd0a8af6204fe8239323b59a8..70d7b60b8e9eb52db4a564cc28ea910615b78b73 100644 GIT binary patch delta 2626 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 delta 2626 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 diff --git a/cmd/lotus-miner/sectors.go b/cmd/lotus-miner/sectors.go index be8170422..9c4a5d0d8 100644 --- a/cmd/lotus-miner/sectors.go +++ b/cmd/lotus-miner/sectors.go @@ -55,6 +55,7 @@ var sectorsCmd = &cli.Command{ sectorsTerminateCmd, sectorsRemoveCmd, sectorsSnapUpCmd, + sectorsSnapAbortCmd, sectorsMarkForUpgradeCmd, sectorsStartSealCmd, sectorsSealDelayCmd, @@ -1520,6 +1521,31 @@ var sectorsSnapUpCmd = &cli.Command{ }, } +var sectorsSnapAbortCmd = &cli.Command{ + Name: "abort-upgrade", + Usage: "Abort the attempted (SnapDeals) upgrade of a CC sector, reverting it to as before", + ArgsUsage: "", + Action: func(cctx *cli.Context) error { + if cctx.Args().Len() != 1 { + return lcli.ShowHelp(cctx, xerrors.Errorf("must pass sector number")) + } + + nodeApi, closer, err := lcli.GetStorageMinerAPI(cctx) + if err != nil { + return err + } + defer closer() + ctx := lcli.ReqContext(cctx) + + id, err := strconv.ParseUint(cctx.Args().Get(0), 10, 64) + if err != nil { + return xerrors.Errorf("could not parse sector number: %w", err) + } + + return nodeApi.SectorAbortUpgrade(ctx, abi.SectorNumber(id)) + }, +} + var sectorsMarkForUpgradeCmd = &cli.Command{ Name: "mark-for-upgrade", Usage: "Mark a committed capacity sector for replacement by a sector with deals", diff --git a/documentation/en/api-v0-methods-miner.md b/documentation/en/api-v0-methods-miner.md index 386cbe1a0..dad3df010 100644 --- a/documentation/en/api-v0-methods-miner.md +++ b/documentation/en/api-v0-methods-miner.md @@ -112,6 +112,7 @@ * [SealingAbort](#SealingAbort) * [SealingSchedDiag](#SealingSchedDiag) * [Sector](#Sector) + * [SectorAbortUpgrade](#SectorAbortUpgrade) * [SectorAddPieceToAny](#SectorAddPieceToAny) * [SectorCommitFlush](#SectorCommitFlush) * [SectorCommitPending](#SectorCommitPending) @@ -1841,6 +1842,21 @@ Response: `{}` ## Sector +### SectorAbortUpgrade +SectorAbortUpgrade can be called on sectors that are in the process of being upgraded to abort it + + +Perms: admin + +Inputs: +```json +[ + 9 +] +``` + +Response: `{}` + ### SectorAddPieceToAny Add piece to an open sector. If no sectors with enough space are open, either a new sector will be created, or this call will block until more diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 08fac332d..11155773a 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -1512,6 +1512,7 @@ COMMANDS: terminate Terminate sector on-chain then remove (WARNING: This means losing power and collateral for the removed sector) remove Forcefully remove a sector (WARNING: This means losing power and collateral for the removed sector (use 'terminate' for lower penalty)) snap-up Mark a committed capacity sector to be filled with deals + abort-upgrade Abort the attempted (SnapDeals) upgrade of a CC sector, reverting it to as before mark-for-upgrade Mark a committed capacity sector for replacement by a sector with deals seal Manually start sealing a sector (filling any unused space with junk) set-seal-delay Set the time, in minutes, that a new sector waits for deals before sealing starts @@ -1747,6 +1748,19 @@ OPTIONS: ``` +### lotus-miner sectors abort-upgrade +``` +NAME: + lotus-miner sectors abort-upgrade - Abort the attempted (SnapDeals) upgrade of a CC sector, reverting it to as before + +USAGE: + lotus-miner sectors abort-upgrade [command options] + +OPTIONS: + --help, -h show help (default: false) + +``` + ### lotus-miner sectors mark-for-upgrade ``` NAME: diff --git a/extern/storage-sealing/fsm.go b/extern/storage-sealing/fsm.go index 83874e907..1b18efcc7 100644 --- a/extern/storage-sealing/fsm.go +++ b/extern/storage-sealing/fsm.go @@ -137,27 +137,32 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto SnapDealsWaitDeals: planOne( on(SectorAddPiece{}, SnapDealsAddPiece), on(SectorStartPacking{}, SnapDealsPacking), + on(SectorAbortUpgrade{}, AbortUpgrade), ), SnapDealsAddPiece: planOne( on(SectorPieceAdded{}, SnapDealsWaitDeals), apply(SectorStartPacking{}), apply(SectorAddPiece{}), on(SectorAddPieceFailed{}, SnapDealsAddPieceFailed), + on(SectorAbortUpgrade{}, AbortUpgrade), ), SnapDealsPacking: planOne( on(SectorPacked{}, UpdateReplica), + on(SectorAbortUpgrade{}, AbortUpgrade), ), UpdateReplica: planOne( on(SectorReplicaUpdate{}, ProveReplicaUpdate), on(SectorUpdateReplicaFailed{}, ReplicaUpdateFailed), on(SectorDealsExpired{}, SnapDealsDealsExpired), on(SectorInvalidDealIDs{}, SnapDealsRecoverDealIDs), + on(SectorAbortUpgrade{}, AbortUpgrade), ), ProveReplicaUpdate: planOne( on(SectorProveReplicaUpdate{}, SubmitReplicaUpdate), on(SectorProveReplicaUpdateFailed{}, ReplicaUpdateFailed), on(SectorDealsExpired{}, SnapDealsDealsExpired), on(SectorInvalidDealIDs{}, SnapDealsRecoverDealIDs), + on(SectorAbortUpgrade{}, AbortUpgrade), ), SubmitReplicaUpdate: planOne( on(SectorReplicaUpdateSubmitted{}, ReplicaUpdateWait), @@ -231,6 +236,7 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto on(SectorRetryWaitDeals{}, SnapDealsWaitDeals), apply(SectorStartPacking{}), apply(SectorAddPiece{}), + on(SectorAbortUpgrade{}, AbortUpgrade), ), SnapDealsDealsExpired: planOne( on(SectorAbortUpgrade{}, AbortUpgrade), @@ -249,6 +255,7 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto on(SectorRetryProveReplicaUpdate{}, ProveReplicaUpdate), on(SectorInvalidDealIDs{}, SnapDealsRecoverDealIDs), on(SectorDealsExpired{}, SnapDealsDealsExpired), + on(SectorAbortUpgrade{}, AbortUpgrade), ), // Post-seal diff --git a/extern/storage-sealing/input.go b/extern/storage-sealing/input.go index f3259f0cc..261979524 100644 --- a/extern/storage-sealing/input.go +++ b/extern/storage-sealing/input.go @@ -524,6 +524,13 @@ func (m *Sealing) StartPacking(sid abi.SectorNumber) error { return m.sectors.Send(uint64(sid), SectorStartPacking{}) } +func (m *Sealing) AbortUpgrade(sid abi.SectorNumber) error { + m.startupWait.Wait() + + log.Infow("aborting upgrade of sector", "sector", sid, "trigger", "user") + return m.sectors.Send(uint64(sid), SectorAbortUpgrade{}) +} + func proposalCID(deal api.PieceDealInfo) cid.Cid { pc, err := deal.DealProposal.Cid() if err != nil { diff --git a/node/impl/storminer.go b/node/impl/storminer.go index cfee53aed..f8b79267b 100644 --- a/node/impl/storminer.go +++ b/node/impl/storminer.go @@ -384,6 +384,10 @@ func (sm *StorageMinerAPI) SectorMarkForUpgrade(ctx context.Context, id abi.Sect return sm.Miner.MarkForUpgrade(ctx, id, snap) } +func (sm *StorageMinerAPI) SectorAbortUpgrade(ctx context.Context, number abi.SectorNumber) error { + return sm.Miner.SectorAbortUpgrade(number) +} + func (sm *StorageMinerAPI) SectorCommitFlush(ctx context.Context) ([]sealiface.CommitBatchRes, error) { return sm.Miner.CommitFlush(ctx) } diff --git a/storage/miner_sealing.go b/storage/miner_sealing.go index d8ef26835..a22c32a40 100644 --- a/storage/miner_sealing.go +++ b/storage/miner_sealing.go @@ -86,6 +86,10 @@ func (m *Miner) IsMarkedForUpgrade(id abi.SectorNumber) bool { return m.sealing.IsMarkedForUpgrade(id) } +func (m *Miner) SectorAbortUpgrade(sectorNum abi.SectorNumber) error { + return m.sealing.AbortUpgrade(sectorNum) +} + func (m *Miner) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, r storage.Data, d api.PieceDealInfo) (api.SectorOffset, error) { return m.sealing.SectorAddPieceToAny(ctx, size, r, d) }