Skip to content

Commit 36143b8

Browse files
CoderZhizjshen14
authored andcommitted
fix bug introduced in #835 (#849)
1 parent 3042d18 commit 36143b8

File tree

2 files changed

+49
-9
lines changed

2 files changed

+49
-9
lines changed

consensus/consensusfsm/fsm.go

+19-2
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,14 @@ func NewConsensusFSM(cfg Config, ctx Context, clock clock.Clock) (*ConsensusFSM,
146146
sAcceptProposalEndorsement, // not enough endorsements
147147
sAcceptLockEndorsement, // enough endorsements
148148
}).
149+
AddTransition(
150+
sAcceptProposalEndorsement,
151+
eReceivePreCommitEndorsement,
152+
cm.onReceiveProposalEndorsement,
153+
[]fsm.State{
154+
sAcceptProposalEndorsement, // not enough endorsements
155+
sAcceptLockEndorsement, // enough endorsements
156+
}).
149157
AddTransition(
150158
sAcceptProposalEndorsement,
151159
eStopReceivingProposalEndorsement,
@@ -161,6 +169,14 @@ func NewConsensusFSM(cfg Config, ctx Context, clock clock.Clock) (*ConsensusFSM,
161169
sAcceptLockEndorsement, // not enough endorsements
162170
sAcceptPreCommitEndorsement, // reach commit agreement, jump to next step
163171
}).
172+
AddTransition(
173+
sAcceptLockEndorsement,
174+
eReceivePreCommitEndorsement,
175+
cm.onReceiveLockEndorsement,
176+
[]fsm.State{
177+
sAcceptLockEndorsement, // not enough endorsements
178+
sAcceptPreCommitEndorsement, // reach commit agreement, jump to next step
179+
}).
164180
AddTransition(
165181
sAcceptPreCommitEndorsement,
166182
eBroadcastPreCommitEndorsement,
@@ -297,11 +313,11 @@ func (m *ConsensusFSM) produce(evt *ConsensusEvent, delay time.Duration) {
297313

298314
func (m *ConsensusFSM) handle(evt *ConsensusEvent) error {
299315
if m.ctx.IsStaleEvent(evt) {
300-
m.ctx.Logger().Debug("stale event", zap.Any("event", evt))
316+
m.ctx.Logger().Debug("stale event", zap.Any("event", evt.Type()))
301317
return nil
302318
}
303319
if m.ctx.IsFutureEvent(evt) {
304-
m.ctx.Logger().Debug("future event", zap.Any("event", evt))
320+
m.ctx.Logger().Debug("future event", zap.Any("event", evt.Type()))
305321
// TODO: find a more appropriate delay
306322
m.produce(evt, m.cfg.UnmatchedEventInterval)
307323
return nil
@@ -472,6 +488,7 @@ func (m *ConsensusFSM) onBroadcastPreCommitEndorsement(evt fsm.Event) (fsm.State
472488
if !ok {
473489
return sAcceptPreCommitEndorsement, errors.Wrap(ErrEvtCast, "failed to cast to consensus event")
474490
}
491+
m.ctx.Logger().Debug("broadcast pre-commit endorsement")
475492
m.ctx.Broadcast(cEvt.Data())
476493
m.produce(cEvt, m.cfg.CommitTTL)
477494

consensus/consensusfsm/fsm_test.go

+30-7
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func TestBackdoorEvt(t *testing.T) {
6060
}
6161
}
6262

63-
func TestStateTransitions(t *testing.T) {
63+
func TestStateTransitionFunctions(t *testing.T) {
6464
t.Parallel()
6565
require := require.New(t)
6666
ctrl := gomock.NewController(t)
@@ -231,18 +231,23 @@ func TestStateTransitions(t *testing.T) {
231231
require.Equal(sAcceptProposalEndorsement, state)
232232
})
233233
t.Run("is-not-locked", func(t *testing.T) {
234-
mockCtx.EXPECT().NewLockEndorsement(gomock.Any()).Return(nil, nil).Times(1)
235-
mockEndorsement := NewMockEndorsement(ctrl)
234+
mockCtx.EXPECT().NewLockEndorsement(gomock.Any()).Return(nil, nil).Times(2)
236235
state, err := cfsm.onReceiveProposalEndorsement(&ConsensusEvent{
237236
eventType: eReceiveProposalEndorsement,
238-
data: mockEndorsement,
237+
data: NewMockEndorsement(ctrl),
238+
})
239+
require.NoError(err)
240+
require.Equal(sAcceptProposalEndorsement, state)
241+
state, err = cfsm.onReceiveProposalEndorsement(&ConsensusEvent{
242+
eventType: eReceivePreCommitEndorsement,
243+
data: NewMockEndorsement(ctrl),
239244
})
240245
require.NoError(err)
241246
require.Equal(sAcceptProposalEndorsement, state)
242247
})
243248
t.Run("is-locked", func(t *testing.T) {
244-
mockCtx.EXPECT().NewLockEndorsement(gomock.Any()).Return(NewMockEndorsement(ctrl), nil).Times(1)
245-
mockCtx.EXPECT().Broadcast(gomock.Any()).Return().Times(1)
249+
mockCtx.EXPECT().NewLockEndorsement(gomock.Any()).Return(NewMockEndorsement(ctrl), nil).Times(2)
250+
mockCtx.EXPECT().Broadcast(gomock.Any()).Return().Times(2)
246251
state, err := cfsm.onReceiveProposalEndorsement(&ConsensusEvent{
247252
eventType: eReceiveProposalEndorsement,
248253
data: NewMockEndorsement(ctrl),
@@ -251,6 +256,14 @@ func TestStateTransitions(t *testing.T) {
251256
require.Equal(sAcceptLockEndorsement, state)
252257
evt := <-cfsm.evtq
253258
require.Equal(eReceiveLockEndorsement, evt.Type())
259+
state, err = cfsm.onReceiveProposalEndorsement(&ConsensusEvent{
260+
eventType: eReceivePreCommitEndorsement,
261+
data: NewMockEndorsement(ctrl),
262+
})
263+
require.NoError(err)
264+
require.Equal(sAcceptLockEndorsement, state)
265+
evt = <-cfsm.evtq
266+
require.Equal(eReceiveLockEndorsement, evt.Type())
254267
})
255268
})
256269
t.Run("onStopReceivingProposalEndorsement", func(t *testing.T) {
@@ -275,13 +288,19 @@ func TestStateTransitions(t *testing.T) {
275288
require.Equal(sAcceptLockEndorsement, state)
276289
})
277290
t.Run("not-ready-to-pre-commit", func(t *testing.T) {
278-
mockCtx.EXPECT().NewPreCommitEndorsement(gomock.Any()).Return(nil, nil).Times(1)
291+
mockCtx.EXPECT().NewPreCommitEndorsement(gomock.Any()).Return(nil, nil).Times(2)
279292
state, err := cfsm.onReceiveLockEndorsement(&ConsensusEvent{
280293
eventType: eReceiveLockEndorsement,
281294
data: NewMockEndorsement(ctrl),
282295
})
283296
require.NoError(err)
284297
require.Equal(sAcceptLockEndorsement, state)
298+
state, err = cfsm.onReceiveLockEndorsement(&ConsensusEvent{
299+
eventType: eReceivePreCommitEndorsement,
300+
data: NewMockEndorsement(ctrl),
301+
})
302+
require.NoError(err)
303+
require.Equal(sAcceptLockEndorsement, state)
285304
})
286305
t.Run("ready-to-pre-commit", func(t *testing.T) {
287306
mockCtx.EXPECT().NewPreCommitEndorsement(gomock.Any()).Return(NewMockEndorsement(ctrl), nil).Times(1)
@@ -421,3 +440,7 @@ func TestStateTransitions(t *testing.T) {
421440
})
422441
})
423442
}
443+
444+
func TestStateTransitionEvents(t *testing.T) {
445+
// TODO (zhi): add event tests
446+
}

0 commit comments

Comments
 (0)