fix: miner: dead loop on removing sector #8386
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Proposed Changes
to remove a sector would cause the fsm(state machine) stuck in dead loop
use following cmd to remove a sector:
the sector state would change from 'any' to 'Removed', and there is a 'plan' in
fsmPlanners
for 'Removed' state:lotus/extern/storage-sealing/fsm.go
Lines 309 to 312 in b8b33c4
lotus/extern/storage-sealing/fsm.go
Line 323 in b8b33c4
that is a function named
final
, defined as following:lotus/extern/storage-sealing/fsm.go
Lines 697 to 706 in b8b33c4
when
plan
abovefinal
onSectorRemoved{}
event, thefinal
would return an error,because
SectorRemoved
doesn't implementglobalMutator
.and here, the
Sealing.Plan
never return this error out, and theprocessed
is 0:lotus/extern/storage-sealing/fsm.go
Lines 19 to 29 in b8b33c4
finally, in
statemachine.run
,https://github.com/filecoin-project/go-statemachine/blob/27f8fbb86dfde4cff15c0a936fe95bf4c90be168/machine.go#L79-L87
fsm.mutateUser
would not get a error, andprocessed
is 0,So,
pendingEvents
wouldn't reduce, after is a go-routine, which called:as above described, is a cycle of dead loop.