diff --git a/checks.go b/checks.go index 491e330b0..18e48faed 100644 --- a/checks.go +++ b/checks.go @@ -14,36 +14,36 @@ import ( // TODO: For now we handle this by halting state execution, when we get jsonrpc reconnecting // We should implement some wait-for-api logic -type ErrApi error +type ErrApi struct{error} -type ErrInvalidDeals error -type ErrExpiredDeals error +type ErrInvalidDeals struct{error} +type ErrExpiredDeals struct{error} -type ErrBadCommD error -type ErrExpiredTicket error +type ErrBadCommD struct{error} +type ErrExpiredTicket struct{error} func checkPieces(ctx context.Context, si SectorInfo, api sealingApi) error { head, err := api.ChainHead(ctx) if err != nil { - return ErrApi(xerrors.Errorf("getting chain head: %w", err)) + return &ErrApi{xerrors.Errorf("getting chain head: %w", err)} } for i, piece := range si.Pieces { deal, err := api.StateMarketStorageDeal(ctx, piece.DealID, nil) if err != nil { - return ErrApi(xerrors.Errorf("getting deal %d for piece %d: %w", piece.DealID, i, err)) + return &ErrApi{xerrors.Errorf("getting deal %d for piece %d: %w", piece.DealID, i, err)} } if string(deal.PieceRef) != string(piece.CommP) { - return ErrInvalidDeals(xerrors.Errorf("piece %d of sector %d refers deal %d with wrong CommP: %x != %x", i, si.SectorID, piece.DealID, piece.CommP, deal.PieceRef)) + return &ErrInvalidDeals{xerrors.Errorf("piece %d (or %d) of sector %d refers deal %d with wrong CommP: %x != %x", i, len(si.Pieces), si.SectorID, piece.DealID, piece.CommP, deal.PieceRef)} } if piece.Size != deal.PieceSize { - return ErrInvalidDeals(xerrors.Errorf("piece %d of sector %d refers deal %d with different size: %d != %d", i, si.SectorID, piece.DealID, piece.Size, deal.PieceSize)) + return &ErrInvalidDeals{xerrors.Errorf("piece %d (or %d) of sector %d refers deal %d with different size: %d != %d", i, len(si.Pieces), si.SectorID, piece.DealID, piece.Size, deal.PieceSize)} } if head.Height() >= deal.ProposalExpiration { - return ErrExpiredDeals(xerrors.Errorf("piece %d of sector %d refers expired deal %d - expires %d, head %d", i, si.SectorID, piece.DealID, deal.ProposalExpiration, head.Height())) + return &ErrExpiredDeals{xerrors.Errorf("piece %d (or %d) of sector %d refers expired deal %d - expires %d, head %d", i, len(si.Pieces), si.SectorID, piece.DealID, deal.ProposalExpiration, head.Height())} } } @@ -53,12 +53,12 @@ func checkPieces(ctx context.Context, si SectorInfo, api sealingApi) error { func checkSeal(ctx context.Context, maddr address.Address, si SectorInfo, api sealingApi) (err error) { head, err := api.ChainHead(ctx) if err != nil { - return ErrApi(xerrors.Errorf("getting chain head: %w", err)) + return &ErrApi{xerrors.Errorf("getting chain head: %w", err)} } ssize, err := api.StateMinerSectorSize(ctx, maddr, head) if err != nil { - return ErrApi(err) + return &ErrApi{err} } ccparams, err := actors.SerializeParams(&actors.ComputeDataCommitmentParams{ @@ -80,17 +80,17 @@ func checkSeal(ctx context.Context, maddr address.Address, si SectorInfo, api se } r, err := api.StateCall(ctx, ccmt, nil) if err != nil { - return ErrApi(xerrors.Errorf("calling ComputeDataCommitment: %w", err)) + return &ErrApi{xerrors.Errorf("calling ComputeDataCommitment: %w", err)} } if r.ExitCode != 0 { - return ErrBadCommD(xerrors.Errorf("receipt for ComputeDataCommitment had exit code %d", r.ExitCode)) + return &ErrBadCommD{xerrors.Errorf("receipt for ComputeDataCommitment had exit code %d", r.ExitCode)} } if string(r.Return) != string(si.CommD) { - return ErrBadCommD(xerrors.Errorf("on chain CommD differs from sector: %x != %x", r.Return, si.CommD)) + return &ErrBadCommD{xerrors.Errorf("on chain CommD differs from sector: %x != %x", r.Return, si.CommD)} } if int64(head.Height())-int64(si.Ticket.BlockHeight+build.SealRandomnessLookback) > build.SealRandomnessLookbackLimit { - return ErrExpiredTicket(xerrors.Errorf("ticket expired: seal height: %d, head: %d", si.Ticket.BlockHeight+build.SealRandomnessLookback, head.Height())) + return &ErrExpiredTicket{xerrors.Errorf("ticket expired: seal height: %d, head: %d", si.Ticket.BlockHeight+build.SealRandomnessLookback, head.Height())} } return nil diff --git a/states_failed.go b/states_failed.go index 5d125c2be..8582471e7 100644 --- a/states_failed.go +++ b/states_failed.go @@ -13,7 +13,7 @@ const minRetryTime = 1 * time.Minute func failedCooldown(ctx statemachine.Context, sector SectorInfo) error { retryStart := time.Unix(int64(sector.Log[len(sector.Log)-1].Timestamp), 0).Add(minRetryTime) if len(sector.Log) > 0 && !time.Now().After(retryStart) { - log.Infof("%s(%d), waiting %s before retrying", api.SectorStates[sector.State], time.Until(retryStart)) + log.Infof("%s(%d), waiting %s before retrying", api.SectorStates[sector.State], sector.SectorID, time.Until(retryStart)) select { case <-time.After(time.Until(retryStart)): case <-ctx.Context().Done():