From 6460e49a3311808dd61b6b6fc06d6de35828df4c Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Tue, 6 Jan 2015 19:47:18 -0800 Subject: [PATCH] wal: save empty snapshot when create So caller can open at empty snapshot to read all entries. --- etcdserver/server.go | 3 --- wal/wal.go | 2 +- wal/wal_test.go | 8 ++++++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/etcdserver/server.go b/etcdserver/server.go index 3094a17ea..97b1736f2 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -859,9 +859,6 @@ func startNode(cfg *ServerConfig, ids []types.ID) (id types.ID, n raft.Node, s * if w, err = wal.Create(cfg.WALDir(), metadata); err != nil { log.Fatalf("etcdserver: create wal error: %v", err) } - if err = w.SaveSnapshot(walpb.Snapshot{}); err != nil { - log.Fatalf("etcdserver: save empty snapshot error: %v", err) - } peers := make([]raft.Peer, len(ids)) for i, id := range ids { ctx, err := json.Marshal((*cfg.Cluster).Member(id)) diff --git a/wal/wal.go b/wal/wal.go index e4e47dc76..0eea6e89b 100644 --- a/wal/wal.go +++ b/wal/wal.go @@ -113,7 +113,7 @@ func Create(dirpath string, metadata []byte) (*WAL, error) { if err := w.encoder.encode(&walpb.Record{Type: metadataType, Data: metadata}); err != nil { return nil, err } - if err = w.sync(); err != nil { + if err = w.SaveSnapshot(walpb.Snapshot{}); err != nil { return nil, err } return w, nil diff --git a/wal/wal_test.go b/wal/wal_test.go index 98a2a3386..9460f0fb3 100644 --- a/wal/wal_test.go +++ b/wal/wal_test.go @@ -24,6 +24,7 @@ import ( "reflect" "testing" + "github.com/coreos/etcd/pkg/pbutil" "github.com/coreos/etcd/raft/raftpb" "github.com/coreos/etcd/wal/walpb" ) @@ -58,6 +59,13 @@ func TestNew(t *testing.T) { if err != nil { t.Fatalf("err = %v, want nil", err) } + r := &walpb.Record{ + Type: snapshotType, + Data: pbutil.MustMarshal(&walpb.Snapshot{}), + } + if err = e.encode(r); err != nil { + t.Fatalf("err = %v, want nil", err) + } e.flush() if !reflect.DeepEqual(gd, wb.Bytes()) { t.Errorf("data = %v, want %v", gd, wb.Bytes())