From 263b2707080da1434aecfefbef02bd3369dfa5a2 Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Mon, 26 Oct 2015 21:06:08 -0700 Subject: [PATCH] etcdserver: commit v3 storage before releasing WAL This ensures that v3 storage could always find the following log entries when restart. --- etcdserver/server.go | 7 +++++++ etcdserver/snapshot_store_test.go | 1 + storage/kv.go | 3 +++ storage/kvstore.go | 2 ++ 4 files changed, 13 insertions(+) diff --git a/etcdserver/server.go b/etcdserver/server.go index 146ba4022..33e116cbb 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -1029,6 +1029,13 @@ func (s *EtcdServer) snapshot(snapi uint64, confState raftpb.ConfState) { } plog.Panicf("unexpected create snapshot error %v", err) } + if s.cfg.V3demo { + // commit v3 storage because WAL file before snapshot index + // could be removed after SaveSnap. + s.kv.Commit() + } + // SaveSnap saves the snapshot and releases the locked wal files + // to the snapshot index. if err := s.r.storage.SaveSnap(snap); err != nil { plog.Fatalf("save snapshot error: %v", err) } diff --git a/etcdserver/snapshot_store_test.go b/etcdserver/snapshot_store_test.go index 119108a34..49ae6f413 100644 --- a/etcdserver/snapshot_store_test.go +++ b/etcdserver/snapshot_store_test.go @@ -186,6 +186,7 @@ func (kv *nopKV) TxnDeleteRange(txnID int64, key, end []byte) (n, rev int64, err func (kv *nopKV) Compact(rev int64) error { return nil } func (kv *nopKV) Hash() (uint32, error) { return 0, nil } func (kv *nopKV) Snapshot() dstorage.Snapshot { return &fakeSnapshot{} } +func (kv *nopKV) Commit() {} func (kv *nopKV) Restore() error { return nil } func (kv *nopKV) Close() error { return nil } diff --git a/storage/kv.go b/storage/kv.go index daf039438..2a605b042 100644 --- a/storage/kv.go +++ b/storage/kv.go @@ -69,6 +69,9 @@ type KV interface { // Snapshot snapshots the full KV store. Snapshot() Snapshot + // Commit commits txns into the underlying backend. + Commit() + Restore() error Close() error } diff --git a/storage/kvstore.go b/storage/kvstore.go index 4a1385e8e..f5a9f6e28 100644 --- a/storage/kvstore.go +++ b/storage/kvstore.go @@ -294,6 +294,8 @@ func (s *store) Snapshot() Snapshot { return s.b.Snapshot() } +func (s *store) Commit() { s.b.ForceCommit() } + func (s *store) Restore() error { s.mu.Lock() defer s.mu.Unlock()