diff --git a/server/etcdserver/server.go b/server/etcdserver/server.go index 82576a5f87a..32e1e280f26 100644 --- a/server/etcdserver/server.go +++ b/server/etcdserver/server.go @@ -35,6 +35,7 @@ import ( humanize "github.com/dustin/go-humanize" "github.com/prometheus/client_golang/prometheus" "go.etcd.io/etcd/server/v3/config" + "go.etcd.io/etcd/server/v3/wal/walpb" "go.uber.org/zap" pb "go.etcd.io/etcd/api/v3/etcdserverpb" @@ -392,7 +393,7 @@ func NewServer(cfg config.ServerConfig) (srv *EtcdServer, err error) { } defer func() { - if err != nil { + if be != nil && err != nil { be.Close() } }() @@ -485,13 +486,14 @@ func NewServer(cfg config.ServerConfig) (srv *EtcdServer, err error) { } // Find a snapshot to start/restart a raft node - walSnaps, err := wal.ValidSnapshotEntries(cfg.Logger, cfg.WALDir()) + var walSnaps []walpb.Snapshot + walSnaps, err = wal.ValidSnapshotEntries(cfg.Logger, cfg.WALDir()) if err != nil { return nil, err } // snapshot files can be orphaned if etcd crashes after writing them but before writing the corresponding // wal log entries - snapshot, err := ss.LoadNewestAvailable(walSnaps) + snapshot, err = ss.LoadNewestAvailable(walSnaps) if err != nil && err != snap.ErrNoSnapshot { return nil, err }