Skip to content

Commit dcc0219

Browse files
authored
seal/snap: Handle insufficient funds errors correctly (#196)
1 parent a0ffd75 commit dcc0219

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

tasks/seal/poller_commit_msg.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func (s *SealPoller) pollCommitMsgLanded(ctx context.Context, task pollTask) err
8282

8383
func (s *SealPoller) pollCommitMsgFail(ctx context.Context, maddr address.Address, task pollTask, execResult dbExecResult) error {
8484
switch exitcode.ExitCode(execResult.ExecutedRcptExitCode) {
85-
case exitcode.SysErrInsufficientFunds:
85+
case exitcode.SysErrInsufficientFunds, exitcode.ErrInsufficientFunds:
8686
fallthrough
8787
case exitcode.SysErrOutOfGas:
8888
// just retry

tasks/seal/poller_precommit_msg.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (s *SealPoller) pollPrecommitMsgLanded(ctx context.Context, task pollTask)
9191

9292
func (s *SealPoller) pollPrecommitMsgFail(ctx context.Context, task pollTask, execResult dbExecResult) error {
9393
switch exitcode.ExitCode(execResult.ExecutedRcptExitCode) {
94-
case exitcode.SysErrInsufficientFunds:
94+
case exitcode.SysErrInsufficientFunds, exitcode.ErrInsufficientFunds:
9595
fallthrough
9696
case exitcode.SysErrOutOfGas:
9797
// just retry

tasks/snap/task_submit.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -536,11 +536,38 @@ func (s *SubmitTask) updateLanded(ctx context.Context, spId, sectorNum int64) er
536536
if err != nil {
537537
return err
538538
}
539-
540-
if exitcode.ExitCode(execResult[0].ExecutedRcptExitCode) != exitcode.Ok {
541-
//return s.pollCommitMsgFail(ctx, task, execResult[0])
542-
log.Errorw("todo handle failed snap prove", "sp", spId, "sector", sectorNum, "exec_epoch", execResult[0].ExecutedTskEpoch, "exec_tskcid", execResult[0].ExecutedTskCID, "msg_cid", execResult[0].ExecutedMsgCID)
539+
switch exitcode.ExitCode(execResult[0].ExecutedRcptExitCode) {
540+
case exitcode.Ok:
541+
// good, noop
542+
case exitcode.SysErrInsufficientFunds, exitcode.ErrInsufficientFunds:
543+
fallthrough
544+
case exitcode.SysErrOutOfGas:
545+
// just retry
546+
n, err := s.db.Exec(ctx, `UPDATE sectors_snap_pipeline SET
547+
after_prove_msg_success = FALSE, after_submit = FALSE
548+
WHERE sp_id = $2 AND sector_number = $3 AND after_prove_msg_success = FALSE AND after_submit = TRUE`,
549+
execResult[0].ExecutedTskCID, spId, sectorNum)
550+
if err != nil {
551+
return xerrors.Errorf("update sectors_snap_pipeline to retry prove send: %w", err)
552+
}
553+
if n == 0 {
554+
return xerrors.Errorf("update sectors_snap_pipeline to retry prove send: no rows updated")
555+
}
543556
return nil
557+
case exitcode.ErrNotFound:
558+
// message not found, but maybe it's fine?
559+
560+
si, err := s.api.StateSectorGetInfo(ctx, maddr, abi.SectorNumber(sectorNum), types.EmptyTSK)
561+
if err != nil {
562+
return xerrors.Errorf("get sector info: %w", err)
563+
}
564+
if si != nil && si.SealedCID.String() == execResult[0].UpdateSealedCID {
565+
return nil
566+
}
567+
568+
return xerrors.Errorf("sector info after prove message not found not as expected")
569+
default:
570+
return xerrors.Errorf("commit message failed with exit code %s", exitcode.ExitCode(execResult[0].ExecutedRcptExitCode))
544571
}
545572

546573
si, err := s.api.StateSectorGetInfo(ctx, maddr, abi.SectorNumber(sectorNum), types.EmptyTSK)

0 commit comments

Comments
 (0)