فهرست منبع

wal: save empty snapshot when create

So caller can open at empty snapshot to read all entries.
Yicheng Qin 11 سال پیش
والد
کامیت
6460e49a33
3فایلهای تغییر یافته به همراه9 افزوده شده و 4 حذف شده
  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())