raft: randomize election timeout

release-2.0
Xiang Li 2014-07-14 22:59:16 -07:00 committed by Yicheng Qin
parent 3921295b21
commit 9c8aff66a1
2 changed files with 5 additions and 2 deletions

View File

@ -3,7 +3,9 @@ package raft
import (
"encoding/json"
golog "log"
"math/rand"
"sync/atomic"
"time"
)
type Interface interface {
@ -36,9 +38,10 @@ func New(id int64, heartbeat, election tick) *Node {
panic("election is least three times as heartbeat [election: %d, heartbeat: %d]")
}
rand.Seed(time.Now().UnixNano())
n := &Node{
heartbeat: heartbeat,
election: election,
election: election + tick(rand.Int31())%election,
sm: newStateMachine(id, []int64{id}),
rmNodes: make(map[int64]struct{}),
}

View File

@ -16,7 +16,7 @@ func TestTickMsgHup(t *testing.T) {
// simulate to patch the join log
n.Step(Message{Type: msgApp, Commit: 1, Entries: []Entry{Entry{}}})
for i := 0; i < defaultElection+1; i++ {
for i := 0; i < defaultElection*2; i++ {
n.Tick()
}