Browse Source

wal: save empty snapshot when create

So caller can open at empty snapshot to read all entries.
Yicheng Qin 11 years ago
parent
commit
6460e49a33
3 changed files with 9 additions and 4 deletions
  1. 0 3
      etcdserver/server.go
  2. 1 1
      wal/wal.go
  3. 8 0
      wal/wal_test.go

+ 0 - 3
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))

+ 1 - 1
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

+ 8 - 0
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())