Skip to content

Commit 0e34e5b

Browse files
authored
Merge pull request #476 from yacovm/restartTimersUponLeaderChange
Restart request pool timers when leader rotates
2 parents d7165c6 + 4cfac9c commit 0e34e5b

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

internal/bft/controller.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,8 @@ func (c *Controller) decide(d decision) {
508508
if c.checkIfRotate(md.BlackList) {
509509
c.Logger.Debugf("Restarting view to rotate the leader")
510510
c.changeView(c.getCurrentViewNumber(), md.LatestSequence+1, c.getCurrentDecisionsInView())
511+
c.Logger.Debugf("Restarting timers in request pool due to leader rotation")
512+
c.RequestPool.RestartTimers()
511513
}
512514
c.MaybePruneRevokedRequests()
513515
if iAm, _ := c.iAmTheLeader(); iAm {

internal/bft/controller_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -834,7 +834,12 @@ func TestRotateFromLeaderToFollower(t *testing.T) {
834834
assert.NoError(t, err)
835835
defer wal.Close()
836836

837+
var restartTimersWG sync.WaitGroup
838+
restartTimersWG.Add(2)
837839
reqPool := &mocks.RequestPool{}
840+
reqPool.On("RestartTimers").Run(func(args mock.Arguments) {
841+
restartTimersWG.Done()
842+
})
838843
reqPool.On("Prune", mock.Anything)
839844
reqPool.On("Close")
840845
leaderMon := &mocks.LeaderMonitor{}
@@ -969,6 +974,7 @@ func TestRotateFromLeaderToFollower(t *testing.T) {
969974
controller.ProcessMessages(1, commit1Next)
970975
controller.ProcessMessages(3, commit3Next)
971976
leaderMonWG.Wait()
977+
restartTimersWG.Wait()
972978
appWG.Wait()
973979
app.AssertNumberOfCalls(t, "Deliver", 2)
974980

@@ -987,9 +993,14 @@ func TestRotateFromFollowerToLeader(t *testing.T) {
987993
assert.NoError(t, err)
988994
defer wal.Close()
989995

996+
var restartTimersWG sync.WaitGroup
997+
restartTimersWG.Add(2)
990998
reqPool := &mocks.RequestPool{}
991999
reqPool.On("Prune", mock.Anything)
9921000
reqPool.On("Close")
1001+
reqPool.On("RestartTimers").Run(func(args mock.Arguments) {
1002+
restartTimersWG.Done()
1003+
})
9931004
leaderMon := &mocks.LeaderMonitor{}
9941005
leaderMonWG := sync.WaitGroup{}
9951006
leaderMon.On("ChangeRole", bft.Leader, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
@@ -1132,6 +1143,7 @@ func TestRotateFromFollowerToLeader(t *testing.T) {
11321143
controller.ProcessMessages(1, commit1Next)
11331144
controller.ProcessMessages(2, commit2Next)
11341145
followerMonWG.Wait()
1146+
restartTimersWG.Wait()
11351147
appWG.Wait()
11361148
app.AssertNumberOfCalls(t, "Deliver", 2)
11371149

0 commit comments

Comments
 (0)