add a new state for precommit wait
This commit is contained in:
parent
744fc321e9
commit
06bcde9c2d
10
fsm.go
10
fsm.go
@ -46,9 +46,13 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto
|
|||||||
),
|
),
|
||||||
PreCommitting: planOne(
|
PreCommitting: planOne(
|
||||||
on(SectorSealPreCommitFailed{}, SealFailed),
|
on(SectorSealPreCommitFailed{}, SealFailed),
|
||||||
on(SectorPreCommitted{}, WaitSeed),
|
on(SectorPreCommitted{}, PreCommitWait),
|
||||||
on(SectorChainPreCommitFailed{}, PreCommitFailed),
|
on(SectorChainPreCommitFailed{}, PreCommitFailed),
|
||||||
),
|
),
|
||||||
|
PreCommitWait: planOne(
|
||||||
|
on(SectorChainPreCommitFailed{}, PreCommitFailed),
|
||||||
|
on(SectorPreCommitLanded{}, WaitSeed),
|
||||||
|
),
|
||||||
WaitSeed: planOne(
|
WaitSeed: planOne(
|
||||||
on(SectorSeedReady{}, Committing),
|
on(SectorSeedReady{}, Committing),
|
||||||
on(SectorChainPreCommitFailed{}, PreCommitFailed),
|
on(SectorChainPreCommitFailed{}, PreCommitFailed),
|
||||||
@ -177,6 +181,8 @@ func (m *Sealing) plan(events []statemachine.Event, state *SectorInfo) (func(sta
|
|||||||
return m.handlePreCommit2, nil
|
return m.handlePreCommit2, nil
|
||||||
case PreCommitting:
|
case PreCommitting:
|
||||||
return m.handlePreCommitting, nil
|
return m.handlePreCommitting, nil
|
||||||
|
case PreCommitWait:
|
||||||
|
return m.handlePreCommitWait, nil
|
||||||
case WaitSeed:
|
case WaitSeed:
|
||||||
return m.handleWaitSeed, nil
|
return m.handleWaitSeed, nil
|
||||||
case Committing:
|
case Committing:
|
||||||
@ -211,7 +217,7 @@ func (m *Sealing) plan(events []statemachine.Event, state *SectorInfo) (func(sta
|
|||||||
case FailedUnrecoverable:
|
case FailedUnrecoverable:
|
||||||
log.Errorf("sector %d failed unrecoverably", state.SectorNumber)
|
log.Errorf("sector %d failed unrecoverably", state.SectorNumber)
|
||||||
default:
|
default:
|
||||||
log.Errorf("unexpected sector update state: %d", state.State)
|
log.Errorf("unexpected sector update state: %s", state.State)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
@ -98,6 +98,14 @@ func (evt SectorPreCommit2) apply(state *SectorInfo) {
|
|||||||
state.CommR = &commr
|
state.CommR = &commr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SectorPreCommitLanded struct {
|
||||||
|
TipSet TipSetToken
|
||||||
|
}
|
||||||
|
|
||||||
|
func (evt SectorPreCommitLanded) apply(si *SectorInfo) {
|
||||||
|
si.PreCommitTipSet = evt.TipSet
|
||||||
|
}
|
||||||
|
|
||||||
type SectorSealPreCommitFailed struct{ error }
|
type SectorSealPreCommitFailed struct{ error }
|
||||||
|
|
||||||
func (evt SectorSealPreCommitFailed) FormatError(xerrors.Printer) (next error) { return evt.error }
|
func (evt SectorSealPreCommitFailed) FormatError(xerrors.Printer) (next error) { return evt.error }
|
||||||
|
@ -41,6 +41,9 @@ func TestHappyPath(t *testing.T) {
|
|||||||
require.Equal(m.t, m.state.State, PreCommitting)
|
require.Equal(m.t, m.state.State, PreCommitting)
|
||||||
|
|
||||||
m.planSingle(SectorPreCommitted{})
|
m.planSingle(SectorPreCommitted{})
|
||||||
|
require.Equal(m.t, m.state.State, PreCommitWait)
|
||||||
|
|
||||||
|
m.planSingle(SectorPreCommitLanded{})
|
||||||
require.Equal(m.t, m.state.State, WaitSeed)
|
require.Equal(m.t, m.state.State, WaitSeed)
|
||||||
|
|
||||||
m.planSingle(SectorSeedReady{})
|
m.planSingle(SectorSeedReady{})
|
||||||
@ -73,6 +76,9 @@ func TestSeedRevert(t *testing.T) {
|
|||||||
require.Equal(m.t, m.state.State, PreCommitting)
|
require.Equal(m.t, m.state.State, PreCommitting)
|
||||||
|
|
||||||
m.planSingle(SectorPreCommitted{})
|
m.planSingle(SectorPreCommitted{})
|
||||||
|
require.Equal(m.t, m.state.State, PreCommitWait)
|
||||||
|
|
||||||
|
m.planSingle(SectorPreCommitLanded{})
|
||||||
require.Equal(m.t, m.state.State, WaitSeed)
|
require.Equal(m.t, m.state.State, WaitSeed)
|
||||||
|
|
||||||
m.planSingle(SectorSeedReady{})
|
m.planSingle(SectorSeedReady{})
|
||||||
|
@ -11,6 +11,7 @@ const (
|
|||||||
PreCommit1 SectorState = "PreCommit1" // do PreCommit1
|
PreCommit1 SectorState = "PreCommit1" // do PreCommit1
|
||||||
PreCommit2 SectorState = "PreCommit2" // do PreCommit1
|
PreCommit2 SectorState = "PreCommit2" // do PreCommit1
|
||||||
PreCommitting SectorState = "PreCommitting" // on chain pre-commit
|
PreCommitting SectorState = "PreCommitting" // on chain pre-commit
|
||||||
|
PreCommitWait SectorState = "PreCommitWait" // waiting for precommit to land on chain
|
||||||
WaitSeed SectorState = "WaitSeed" // waiting for seed
|
WaitSeed SectorState = "WaitSeed" // waiting for seed
|
||||||
Committing SectorState = "Committing"
|
Committing SectorState = "Committing"
|
||||||
CommitWait SectorState = "CommitWait" // waiting for message to land on chain
|
CommitWait SectorState = "CommitWait" // waiting for message to land on chain
|
||||||
|
@ -159,7 +159,7 @@ func (m *Sealing) handlePreCommitting(ctx statemachine.Context, sector SectorInf
|
|||||||
return ctx.Send(SectorPreCommitted{Message: mcid})
|
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
|
// 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)
|
log.Info("Sector precommitted: ", sector.SectorNumber)
|
||||||
mw, err := m.api.StateWaitMsg(ctx.Context(), *sector.PreCommitMessage)
|
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)
|
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 {
|
if err != nil {
|
||||||
return xerrors.Errorf("getting precommit info: %w", err)
|
return xerrors.Errorf("getting precommit info: %w", err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user