Merge pull request #20 from filecoin-project/feat/pre-commit-wait-state

add a new state for precommit wait
This commit is contained in:
Whyrusleeping
2020-05-27 11:35:32 -07:00
committed by GitHub
6 changed files with 30 additions and 4 deletions
+8 -2
View File
@@ -46,9 +46,13 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto
),
PreCommitting: planOne(
on(SectorSealPreCommitFailed{}, SealFailed),
on(SectorPreCommitted{}, WaitSeed),
on(SectorPreCommitted{}, PreCommitWait),
on(SectorChainPreCommitFailed{}, PreCommitFailed),
),
PreCommitWait: planOne(
on(SectorChainPreCommitFailed{}, PreCommitFailed),
on(SectorPreCommitLanded{}, WaitSeed),
),
WaitSeed: planOne(
on(SectorSeedReady{}, Committing),
on(SectorChainPreCommitFailed{}, PreCommitFailed),
@@ -177,6 +181,8 @@ func (m *Sealing) plan(events []statemachine.Event, state *SectorInfo) (func(sta
return m.handlePreCommit2, nil
case PreCommitting:
return m.handlePreCommitting, nil
case PreCommitWait:
return m.handlePreCommitWait, nil
case WaitSeed:
return m.handleWaitSeed, nil
case Committing:
@@ -211,7 +217,7 @@ func (m *Sealing) plan(events []statemachine.Event, state *SectorInfo) (func(sta
case FailedUnrecoverable:
log.Errorf("sector %d failed unrecoverably", state.SectorNumber)
default:
log.Errorf("unexpected sector update state: %d", state.State)
log.Errorf("unexpected sector update state: %s", state.State)
}
return nil, nil
+8
View File
@@ -98,6 +98,14 @@ func (evt SectorPreCommit2) apply(state *SectorInfo) {
state.CommR = &commr
}
type SectorPreCommitLanded struct {
TipSet TipSetToken
}
func (evt SectorPreCommitLanded) apply(si *SectorInfo) {
si.PreCommitTipSet = evt.TipSet
}
type SectorSealPreCommitFailed struct{ error }
func (evt SectorSealPreCommitFailed) FormatError(xerrors.Printer) (next error) { return evt.error }
+6
View File
@@ -41,6 +41,9 @@ func TestHappyPath(t *testing.T) {
require.Equal(m.t, m.state.State, PreCommitting)
m.planSingle(SectorPreCommitted{})
require.Equal(m.t, m.state.State, PreCommitWait)
m.planSingle(SectorPreCommitLanded{})
require.Equal(m.t, m.state.State, WaitSeed)
m.planSingle(SectorSeedReady{})
@@ -73,6 +76,9 @@ func TestSeedRevert(t *testing.T) {
require.Equal(m.t, m.state.State, PreCommitting)
m.planSingle(SectorPreCommitted{})
require.Equal(m.t, m.state.State, PreCommitWait)
m.planSingle(SectorPreCommitLanded{})
require.Equal(m.t, m.state.State, WaitSeed)
m.planSingle(SectorSeedReady{})
+1
View File
@@ -11,6 +11,7 @@ const (
PreCommit1 SectorState = "PreCommit1" // do PreCommit1
PreCommit2 SectorState = "PreCommit2" // do PreCommit1
PreCommitting SectorState = "PreCommitting" // on chain pre-commit
PreCommitWait SectorState = "PreCommitWait" // waiting for precommit to land on chain
WaitSeed SectorState = "WaitSeed" // waiting for seed
Committing SectorState = "Committing"
CommitWait SectorState = "CommitWait" // waiting for message to land on chain
+6 -2
View File
@@ -159,7 +159,7 @@ func (m *Sealing) handlePreCommitting(ctx statemachine.Context, sector SectorInf
return ctx.Send(SectorPreCommitted{Message: mcid})
}
func (m *Sealing) handleWaitSeed(ctx statemachine.Context, sector SectorInfo) error {
func (m *Sealing) handlePreCommitWait(ctx statemachine.Context, sector SectorInfo) error {
// would be ideal to just use the events.Called handler, but it wouldnt be able to handle individual message timeouts
log.Info("Sector precommitted: ", sector.SectorNumber)
mw, err := m.api.StateWaitMsg(ctx.Context(), *sector.PreCommitMessage)
@@ -174,7 +174,11 @@ func (m *Sealing) handleWaitSeed(ctx statemachine.Context, sector SectorInfo) er
}
log.Info("precommit message landed on chain: ", sector.SectorNumber)
pci, err := m.api.StateSectorPreCommitInfo(ctx.Context(), m.maddr, sector.SectorNumber, mw.TipSetTok)
return ctx.Send(SectorPreCommitLanded{TipSet: mw.TipSetTok})
}
func (m *Sealing) handleWaitSeed(ctx statemachine.Context, sector SectorInfo) error {
pci, err := m.api.StateSectorPreCommitInfo(ctx.Context(), m.maddr, sector.SectorNumber, sector.PreCommitTipSet)
if err != nil {
return xerrors.Errorf("getting precommit info: %w", err)
}
+1
View File
@@ -67,6 +67,7 @@ type SectorInfo struct {
Proof []byte
PreCommitMessage *cid.Cid
PreCommitTipSet TipSetToken
// WaitSeed
SeedValue abi.InteractiveSealRandomness