diff --git a/etcdserver/server.go b/etcdserver/server.go index ba2a6edf1..66cf31516 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -101,6 +101,8 @@ type Storage interface { // remove it in this interface. // Cut cuts out a new wal file for saving new state and entries. Cut() error + // Close closes the Storage and performs finalization. + Close() error } type Server interface { @@ -386,6 +388,9 @@ func (s *EtcdServer) run() { defer func() { s.node.Stop() s.sendhub.Stop() + if err := s.storage.Close(); err != nil { + log.Panicf("etcdserver: close storage error: %v", err) + } close(s.done) }() for { diff --git a/etcdserver/server_test.go b/etcdserver/server_test.go index 1c12209d5..d6a89cdb4 100644 --- a/etcdserver/server_test.go +++ b/etcdserver/server_test.go @@ -1530,6 +1530,7 @@ func (p *storageRecorder) SaveSnap(st raftpb.Snapshot) error { } return nil } +func (p *storageRecorder) Close() error { return nil } type readyNode struct { readyc chan raft.Ready