From 78918848bd61d22faec0f5612b27ca50b78121b3 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 22 Feb 2018 21:19:23 -0800 Subject: [PATCH] etcdserver: support Raft Pre-Vote Signed-off-by: Gyuho Lee --- etcdserver/config.go | 3 +++ etcdserver/raft.go | 3 +++ etcdserver/server.go | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/etcdserver/config.go b/etcdserver/config.go index 4626ab85d..7a362aa13 100644 --- a/etcdserver/config.go +++ b/etcdserver/config.go @@ -76,6 +76,9 @@ type ServerConfig struct { InitialCorruptCheck bool CorruptCheckTime time.Duration + // PreVote is true to enable Raft Pre-Vote. + PreVote bool + Debug bool } diff --git a/etcdserver/raft.go b/etcdserver/raft.go index 9695da80e..1fa085905 100644 --- a/etcdserver/raft.go +++ b/etcdserver/raft.go @@ -411,6 +411,7 @@ func startNode(cfg ServerConfig, cl *membership.RaftCluster, ids []types.ID) (id MaxSizePerMsg: maxSizePerMsg, MaxInflightMsgs: maxInflightMsgs, CheckQuorum: true, + PreVote: cfg.PreVote, } n = raft.StartNode(c, peers) @@ -445,6 +446,7 @@ func restartNode(cfg ServerConfig, snapshot *raftpb.Snapshot) (types.ID, *member MaxSizePerMsg: maxSizePerMsg, MaxInflightMsgs: maxInflightMsgs, CheckQuorum: true, + PreVote: cfg.PreVote, } n := raft.RestartNode(c) @@ -501,6 +503,7 @@ func restartAsStandaloneNode(cfg ServerConfig, snapshot *raftpb.Snapshot) (types MaxSizePerMsg: maxSizePerMsg, MaxInflightMsgs: maxInflightMsgs, CheckQuorum: true, + PreVote: cfg.PreVote, } n := raft.RestartNode(c) raftStatus = n.Status diff --git a/etcdserver/server.go b/etcdserver/server.go index 5bd489c12..aa2321752 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -258,6 +258,12 @@ type EtcdServer struct { // NewServer creates a new EtcdServer from the supplied configuration. The // configuration is considered static for the lifetime of the EtcdServer. func NewServer(cfg ServerConfig) (srv *EtcdServer, err error) { + if cfg.PreVote { + plog.Info("Raft Pre-Vote is enabled") + } else { + plog.Info("Raft Pre-Vote is disabled") + } + st := v2store.New(StoreClusterPrefix, StoreKeysPrefix) var (