sealing pipeline: Fix PC1 retry loop

This commit is contained in:
Łukasz Magiera 2023-07-18 11:55:14 -07:00
parent 2ddb52e103
commit d127208b85
4 changed files with 42 additions and 1 deletions

View File

@ -31,7 +31,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error {
cw := cbg.NewCborWriter(w)
if _, err := cw.Write([]byte{184, 38}); err != nil {
if _, err := cw.Write([]byte{184, 39}); err != nil {
return err
}
@ -565,6 +565,22 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error {
}
}
// t.PreCommit1Fails (uint64) (uint64)
if len("PreCommit1Fails") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"PreCommit1Fails\" was too long")
}
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("PreCommit1Fails"))); err != nil {
return err
}
if _, err := io.WriteString(w, string("PreCommit1Fails")); err != nil {
return err
}
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.PreCommit1Fails)); err != nil {
return err
}
// t.PreCommit2Fails (uint64) (uint64)
if len("PreCommit2Fails") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"PreCommit2Fails\" was too long")
@ -1402,6 +1418,21 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) {
t.UpdateUnsealed = &c
}
}
// t.PreCommit1Fails (uint64) (uint64)
case "PreCommit1Fails":
{
maj, extra, err = cr.ReadHeader()
if err != nil {
return err
}
if maj != cbg.MajUnsignedInt {
return fmt.Errorf("wrong type for uint64 field")
}
t.PreCommit1Fails = uint64(extra)
}
// t.PreCommit2Fails (uint64) (uint64)
case "PreCommit2Fails":

View File

@ -182,6 +182,8 @@ func (evt SectorSealPreCommit1Failed) FormatError(xerrors.Printer) (next error)
func (evt SectorSealPreCommit1Failed) apply(si *SectorInfo) {
si.InvalidProofs = 0 // reset counter
si.PreCommit2Fails = 0
si.PreCommit1Fails++
}
type SectorSealPreCommit2Failed struct{ error }

View File

@ -54,7 +54,13 @@ func (m *Sealing) checkPreCommitted(ctx statemachine.Context, sector SectorInfo)
return info, true
}
var MaxPreCommit1Retries = uint64(3)
func (m *Sealing) handleSealPrecommit1Failed(ctx statemachine.Context, sector SectorInfo) error {
if sector.PreCommit1Fails > MaxPreCommit1Retries {
return ctx.Send(SectorRemove{})
}
if err := failedCooldown(ctx, sector); err != nil {
return err
}

View File

@ -56,6 +56,8 @@ type SectorInfo struct {
TicketEpoch abi.ChainEpoch
PreCommit1Out storiface.PreCommit1Out
PreCommit1Fails uint64
// PreCommit2
CommD *cid.Cid
CommR *cid.Cid // SectorKey