From c1c9a2c96ce3d017bec3bd8478a205dbad90de8c Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Mon, 22 May 2017 15:36:07 -0700 Subject: [PATCH] etcdserver: close mvcc.KV on init error path Scheduled compaction will panic if KV is not stopped before closing the backend. --- etcdserver/server.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/etcdserver/server.go b/etcdserver/server.go index 87602606b..5ab9e5255 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -450,6 +450,15 @@ func NewServer(cfg *ServerConfig) (srv *EtcdServer, err error) { plog.Warningf("consistent index never saved (snapshot index=%d)", snapshot.Metadata.Index) } } + newSrv := srv // since srv == nil in defer if srv is returned as nil + defer func() { + // closing backend without first closing kv can cause + // resumed compactions to fail with closed tx errors + if err != nil { + newSrv.kv.Close() + } + }() + srv.consistIndex.setConsistentIndex(srv.kv.ConsistentIndex()) tp, err := auth.NewTokenProvider(cfg.AuthToken, func(index uint64) <-chan struct{} {