From 54c6784dcf2686968c871d438342248970be6150 Mon Sep 17 00:00:00 2001 From: Gyu-Ho Lee Date: Wed, 22 Nov 2017 12:56:03 -0800 Subject: [PATCH] embed: corrupt-check on restart member Signed-off-by: Gyu-Ho Lee --- embed/etcd.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/embed/etcd.go b/embed/etcd.go index e586b7e674e2..05833bd2d2c2 100644 --- a/embed/etcd.go +++ b/embed/etcd.go @@ -124,7 +124,9 @@ func StartEtcd(inCfg *Config) (e *Etcd, err error) { token string ) + memberInitialized := true if !isMemberInitialized(cfg) { + memberInitialized = false urlsmap, token, err = cfg.PeerURLsMapAndToken("etcd") if err != nil { return e, fmt.Errorf("error setting up initial cluster: %v", err) @@ -186,6 +188,16 @@ func StartEtcd(inCfg *Config) (e *Etcd, err error) { // buffer channel so goroutines on closed connections won't wait forever e.errc = make(chan error, len(e.Peers)+len(e.Clients)+2*len(e.sctxs)) + // newly started member ("memberInitialized==false") + // does not need corruption check + if memberInitialized { + if err = e.Server.CheckInitialHashKV(); err != nil { + // since this is before "EtcdServer.Start()" + // if not nil, it will block on "EtcdServer.Close()" + e.Server = nil + return e, err + } + } e.Server.Start() if err = e.servePeers(); err != nil {