Check (pre)commit receipt before other checks in failed states
This commit is contained in:
parent
d421274dcd
commit
cde0e58e39
2
extern/storage-sealing/fsm.go
vendored
2
extern/storage-sealing/fsm.go
vendored
@ -106,6 +106,7 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto
|
|||||||
),
|
),
|
||||||
PreCommitFailed: planOne(
|
PreCommitFailed: planOne(
|
||||||
on(SectorRetryPreCommit{}, PreCommitting),
|
on(SectorRetryPreCommit{}, PreCommitting),
|
||||||
|
on(SectorRetryPreCommitWait{}, PreCommitWait),
|
||||||
on(SectorRetryWaitSeed{}, WaitSeed),
|
on(SectorRetryWaitSeed{}, WaitSeed),
|
||||||
on(SectorSealPreCommit1Failed{}, SealPreCommit1Failed),
|
on(SectorSealPreCommit1Failed{}, SealPreCommit1Failed),
|
||||||
on(SectorPreCommitLanded{}, WaitSeed),
|
on(SectorPreCommitLanded{}, WaitSeed),
|
||||||
@ -125,6 +126,7 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto
|
|||||||
on(SectorChainPreCommitFailed{}, PreCommitFailed),
|
on(SectorChainPreCommitFailed{}, PreCommitFailed),
|
||||||
on(SectorRetryPreCommit{}, PreCommitting),
|
on(SectorRetryPreCommit{}, PreCommitting),
|
||||||
on(SectorRetryCommitWait{}, CommitWait),
|
on(SectorRetryCommitWait{}, CommitWait),
|
||||||
|
on(SectorRetrySubmitCommit{}, SubmitCommit),
|
||||||
on(SectorDealsExpired{}, DealsExpired),
|
on(SectorDealsExpired{}, DealsExpired),
|
||||||
on(SectorInvalidDealIDs{}, RecoverDealIDs),
|
on(SectorInvalidDealIDs{}, RecoverDealIDs),
|
||||||
on(SectorTicketExpired{}, Removing),
|
on(SectorTicketExpired{}, Removing),
|
||||||
|
56
extern/storage-sealing/states_failed.go
vendored
56
extern/storage-sealing/states_failed.go
vendored
@ -77,6 +77,34 @@ func (m *Sealing) handlePreCommitFailed(ctx statemachine.Context, sector SectorI
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if sector.PreCommitMessage != nil {
|
||||||
|
mw, err := m.api.StateSearchMsg(ctx.Context(), *sector.PreCommitMessage)
|
||||||
|
if err != nil {
|
||||||
|
// API error
|
||||||
|
if err := failedCooldown(ctx, sector); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.Send(SectorRetryPreCommitWait{})
|
||||||
|
}
|
||||||
|
|
||||||
|
if mw == nil {
|
||||||
|
// API error in precommit
|
||||||
|
return ctx.Send(SectorRetryPreCommitWait{})
|
||||||
|
}
|
||||||
|
|
||||||
|
switch mw.Receipt.ExitCode {
|
||||||
|
case exitcode.Ok:
|
||||||
|
// API error in PreCommitWait
|
||||||
|
return ctx.Send(SectorRetryPreCommitWait{})
|
||||||
|
case exitcode.SysErrOutOfGas:
|
||||||
|
// API error in PreCommitWait AND gas estimator guessed a wrong number in PreCommit
|
||||||
|
return ctx.Send(SectorRetryPreCommit{})
|
||||||
|
default:
|
||||||
|
// something else went wrong
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := checkPrecommit(ctx.Context(), m.Address(), sector, tok, height, m.api); err != nil {
|
if err := checkPrecommit(ctx.Context(), m.Address(), sector, tok, height, m.api); err != nil {
|
||||||
switch err.(type) {
|
switch err.(type) {
|
||||||
case *ErrApi:
|
case *ErrApi:
|
||||||
@ -160,6 +188,34 @@ func (m *Sealing) handleCommitFailed(ctx statemachine.Context, sector SectorInfo
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if sector.CommitMessage != nil {
|
||||||
|
mw, err := m.api.StateSearchMsg(ctx.Context(), *sector.CommitMessage)
|
||||||
|
if err != nil {
|
||||||
|
// API error
|
||||||
|
if err := failedCooldown(ctx, sector); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.Send(SectorRetryCommitWait{})
|
||||||
|
}
|
||||||
|
|
||||||
|
if mw == nil {
|
||||||
|
// API error in commit
|
||||||
|
return ctx.Send(SectorRetryCommitWait{})
|
||||||
|
}
|
||||||
|
|
||||||
|
switch mw.Receipt.ExitCode {
|
||||||
|
case exitcode.Ok:
|
||||||
|
// API error in CcommitWait
|
||||||
|
return ctx.Send(SectorRetryCommitWait{})
|
||||||
|
case exitcode.SysErrOutOfGas:
|
||||||
|
// API error in CommitWait AND gas estimator guessed a wrong number in SubmitCommit
|
||||||
|
return ctx.Send(SectorRetrySubmitCommit{})
|
||||||
|
default:
|
||||||
|
// something else went wrong
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := checkPrecommit(ctx.Context(), m.maddr, sector, tok, height, m.api); err != nil {
|
if err := checkPrecommit(ctx.Context(), m.maddr, sector, tok, height, m.api); err != nil {
|
||||||
switch err.(type) {
|
switch err.(type) {
|
||||||
case *ErrApi:
|
case *ErrApi:
|
||||||
|
Loading…
Reference in New Issue
Block a user