فهرست منبع

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 {
 	if w, err = wal.Create(cfg.WALDir(), metadata); err != nil {
 		log.Fatalf("etcdserver: create wal error: %v", err)
 		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))
 	peers := make([]raft.Peer, len(ids))
 	for i, id := range ids {
 	for i, id := range ids {
 		ctx, err := json.Marshal((*cfg.Cluster).Member(id))
 		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 {
 	if err := w.encoder.encode(&walpb.Record{Type: metadataType, Data: metadata}); err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
-	if err = w.sync(); err != nil {
+	if err = w.SaveSnapshot(walpb.Snapshot{}); err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
 	return w, nil
 	return w, nil

+ 8 - 0
wal/wal_test.go

@@ -24,6 +24,7 @@ import (
 	"reflect"
 	"reflect"
 	"testing"
 	"testing"
 
 
+	"github.com/coreos/etcd/pkg/pbutil"
 	"github.com/coreos/etcd/raft/raftpb"
 	"github.com/coreos/etcd/raft/raftpb"
 	"github.com/coreos/etcd/wal/walpb"
 	"github.com/coreos/etcd/wal/walpb"
 )
 )
@@ -58,6 +59,13 @@ func TestNew(t *testing.T) {
 	if err != nil {
 	if err != nil {
 		t.Fatalf("err = %v, want nil", err)
 		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()
 	e.flush()
 	if !reflect.DeepEqual(gd, wb.Bytes()) {
 	if !reflect.DeepEqual(gd, wb.Bytes()) {
 		t.Errorf("data = %v, want %v", gd, wb.Bytes())
 		t.Errorf("data = %v, want %v", gd, wb.Bytes())