mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
raft: randomize election timeout
This commit is contained in:
parent
3921295b21
commit
9c8aff66a1
@ -3,7 +3,9 @@ package raft
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
golog "log"
|
golog "log"
|
||||||
|
"math/rand"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Interface interface {
|
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]")
|
panic("election is least three times as heartbeat [election: %d, heartbeat: %d]")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rand.Seed(time.Now().UnixNano())
|
||||||
n := &Node{
|
n := &Node{
|
||||||
heartbeat: heartbeat,
|
heartbeat: heartbeat,
|
||||||
election: election,
|
election: election + tick(rand.Int31())%election,
|
||||||
sm: newStateMachine(id, []int64{id}),
|
sm: newStateMachine(id, []int64{id}),
|
||||||
rmNodes: make(map[int64]struct{}),
|
rmNodes: make(map[int64]struct{}),
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ func TestTickMsgHup(t *testing.T) {
|
|||||||
// simulate to patch the join log
|
// simulate to patch the join log
|
||||||
n.Step(Message{Type: msgApp, Commit: 1, Entries: []Entry{Entry{}}})
|
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()
|
n.Tick()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user