From 6371853be687f004f2c79ac8a27e5f5321961c9c Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Tue, 6 Mar 2018 01:57:06 -0800 Subject: [PATCH] etcdserver: move "advanceRaftTicks" to "NewServer" Signed-off-by: Gyuho Lee --- etcdserver/raft.go | 12 ------------ etcdserver/server.go | 12 ++++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/etcdserver/raft.go b/etcdserver/raft.go index 7af1f06cce3..ebbfa0f94e4 100644 --- a/etcdserver/raft.go +++ b/etcdserver/raft.go @@ -380,16 +380,6 @@ 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() - } -} - func startNode(cfg ServerConfig, cl *membership.RaftCluster, ids []types.ID) (id types.ID, n raft.Node, s *raft.MemoryStorage, w *wal.WAL) { var err error member := cl.MemberByName(cfg.Name) @@ -428,7 +418,6 @@ func startNode(cfg ServerConfig, cl *membership.RaftCluster, ids []types.ID) (id raftStatusMu.Lock() raftStatus = n.Status raftStatusMu.Unlock() - advanceTicksForElection(n, c.ElectionTick) return id, n, s, w } @@ -463,7 +452,6 @@ func restartNode(cfg ServerConfig, snapshot *raftpb.Snapshot) (types.ID, *member raftStatusMu.Lock() raftStatus = n.Status raftStatusMu.Unlock() - advanceTicksForElection(n, c.ElectionTick) return id, cl, n, s, w } diff --git a/etcdserver/server.go b/etcdserver/server.go index aa2321752de..1cfa28e0f0c 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -179,6 +179,12 @@ type EtcdServer struct { consistIndex consistentIndex // must use atomic operations to access; keep 64-bit aligned. r raftNode // uses 64-bit atomics; keep 64-bit aligned. + // advanceRaftTicks advances ticks of Raft node. + // This can be used for fast-forwarding election + // ticks in multi data-center deployments, thus + // speeding up election process. + advanceRaftTicks func(ticks int) + readych chan struct{} Cfg ServerConfig @@ -445,6 +451,12 @@ func NewServer(cfg ServerConfig) (srv *EtcdServer, err error) { hostWhitelist: cfg.HostWhitelist, } + srv.advanceRaftTicks = func(ticks int) { + for i := 0; i < ticks; i++ { + srv.r.tick() + } + } + srv.applyV2 = &applierV2store{store: srv.v2store, cluster: srv.cluster} srv.be = be