Merge pull request #756 from filecoin-project/feat/more-sector-states
Improving storage miner sector states
This commit is contained in:
commit
77b5490e57
@ -20,6 +20,7 @@ const (
|
||||
PreCommitting // on chain pre-commit
|
||||
PreCommitted // waiting for seed
|
||||
Committing
|
||||
CommitWait // waiting for message to land on chain
|
||||
Proving
|
||||
|
||||
SealFailed
|
||||
|
@ -131,6 +131,7 @@ func (m *Miner) handlePreCommitted(ctx context.Context, sector SectorInfo) *sect
|
||||
|
||||
if mw.Receipt.ExitCode != 0 {
|
||||
log.Error("sector precommit failed: ", mw.Receipt.ExitCode)
|
||||
err := xerrors.Errorf("sector precommit failed: %d", mw.Receipt.ExitCode)
|
||||
return sector.upd().to(api.PreCommitFailed).error(err)
|
||||
}
|
||||
log.Info("precommit message landed on chain: ", sector.SectorID)
|
||||
@ -157,6 +158,7 @@ func (m *Miner) handlePreCommitted(ctx context.Context, sector SectorInfo) *sect
|
||||
return nil
|
||||
}, func(ctx context.Context, ts *types.TipSet) error {
|
||||
log.Warn("revert in interactive commit sector step")
|
||||
// TODO: need to cancel running process and restart...
|
||||
return nil
|
||||
}, 3, mw.TipSet.Height()+build.InteractivePoRepDelay)
|
||||
if err != nil {
|
||||
@ -203,20 +205,29 @@ func (m *Miner) handleCommitting(ctx context.Context, sector SectorInfo) *sector
|
||||
}
|
||||
|
||||
// TODO: Separate state before this wait, so we persist message cid?
|
||||
|
||||
mw, err := m.api.StateWaitMsg(ctx, smsg.Cid())
|
||||
if err != nil {
|
||||
return sector.upd().to(api.CommitFailed).error(xerrors.Errorf("failed to wait for porep inclusion: %w", err))
|
||||
}
|
||||
|
||||
if mw.Receipt.ExitCode != 0 {
|
||||
log.Errorf("UNHANDLED: submitting sector proof failed (exit=%d, msg=%s) (t:%x; s:%x(%d); p:%x)", mw.Receipt.ExitCode, smsg.Cid(), sector.Ticket.TicketBytes, sector.Seed.TicketBytes, sector.Seed.BlockHeight, params.Proof)
|
||||
return sector.upd().fatal(xerrors.New("UNHANDLED: submitting sector proof failed"))
|
||||
}
|
||||
|
||||
return sector.upd().to(api.Proving).state(func(info *SectorInfo) {
|
||||
return sector.upd().to(api.CommitWait).state(func(info *SectorInfo) {
|
||||
mcid := smsg.Cid()
|
||||
info.CommitMessage = &mcid
|
||||
info.Proof = proof
|
||||
})
|
||||
}
|
||||
|
||||
func (m *Miner) handleCommitWait(ctx context.Context, sector SectorInfo) *sectorUpdate {
|
||||
if sector.CommitMessage == nil {
|
||||
log.Errorf("sector %d entered commit wait state without a message cid", sector.SectorID)
|
||||
return sector.upd().to(api.CommitFailed).error(xerrors.Errorf("entered commit wait with no commit cid"))
|
||||
}
|
||||
|
||||
mw, err := m.api.StateWaitMsg(ctx, *sector.CommitMessage)
|
||||
if err != nil {
|
||||
return sector.upd().to(api.CommitFailed).error(xerrors.Errorf("failed to wait for porep inclusion: %w", err))
|
||||
}
|
||||
|
||||
if mw.Receipt.ExitCode != 0 {
|
||||
log.Errorf("UNHANDLED: submitting sector proof failed (exit=%d, msg=%s) (t:%x; s:%x(%d); p:%x)", mw.Receipt.ExitCode, sector.CommitMessage, sector.Ticket.TicketBytes, sector.Seed.TicketBytes, sector.Seed.BlockHeight, sector.Proof)
|
||||
return sector.upd().fatal(xerrors.New("UNHANDLED: submitting sector proof failed"))
|
||||
}
|
||||
|
||||
return sector.upd().to(api.Proving).state(func(info *SectorInfo) {
|
||||
})
|
||||
}
|
||||
|
@ -229,6 +229,8 @@ func (m *Miner) onSectorUpdated(ctx context.Context, update sectorUpdate) {
|
||||
m.handleSectorUpdate(ctx, sector, m.handlePreCommitted)
|
||||
case api.Committing:
|
||||
m.handleSectorUpdate(ctx, sector, m.handleCommitting)
|
||||
case api.CommitWait:
|
||||
m.handleSectorUpdate(ctx, sector, m.handleCommitWait)
|
||||
case api.Proving:
|
||||
// TODO: track sector health / expiration
|
||||
log.Infof("Proving sector %d", update.id)
|
||||
|
Loading…
Reference in New Issue
Block a user