|
|
@@ -368,13 +368,13 @@ func (r *raftNode) resumeSending() {
|
|
|
p.Resume()
|
|
|
}
|
|
|
|
|
|
-// advanceTicksForElection advances ticks to the node for fast election.
|
|
|
-// This reduces the time to wait for first leader election if bootstrapping the whole
|
|
|
-// cluster, while leaving at least 1 heartbeat for possible existing leader
|
|
|
-// to contact it.
|
|
|
-func advanceTicksForElection(n raft.Node, electionTicks int) {
|
|
|
- for i := 0; i < electionTicks-1; i++ {
|
|
|
- n.Tick()
|
|
|
+// advanceTicks advances ticks of Raft node.
|
|
|
+// This can be used for fast-forwarding election
|
|
|
+// ticks in multi data-center deployments, thus
|
|
|
+// speeding up election process.
|
|
|
+func (r *raftNode) advanceTicks(ticks int) {
|
|
|
+ for i := 0; i < ticks; i++ {
|
|
|
+ r.Tick()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -415,8 +415,9 @@ func startNode(cfg *ServerConfig, cl *membership.RaftCluster, ids []types.ID) (i
|
|
|
raftStatusMu.Lock()
|
|
|
raftStatus = n.Status
|
|
|
raftStatusMu.Unlock()
|
|
|
+
|
|
|
advanceTicksForElection(n, c.ElectionTick)
|
|
|
- return
|
|
|
+ return id, n, s, w
|
|
|
}
|
|
|
|
|
|
func restartNode(cfg *ServerConfig, snapshot *raftpb.Snapshot) (types.ID, *membership.RaftCluster, raft.Node, *raft.MemoryStorage, *wal.WAL) {
|
|
|
@@ -449,7 +450,6 @@ func restartNode(cfg *ServerConfig, snapshot *raftpb.Snapshot) (types.ID, *membe
|
|
|
raftStatusMu.Lock()
|
|
|
raftStatus = n.Status
|
|
|
raftStatusMu.Unlock()
|
|
|
- advanceTicksForElection(n, c.ElectionTick)
|
|
|
return id, cl, n, s, w
|
|
|
}
|
|
|
|