wal: sync before returning from create

This commit is contained in:
Xiang Li 2014-11-03 14:28:59 -08:00
parent 75104c10d4
commit ff1f5a9d57
2 changed files with 23 additions and 2 deletions

View File

@ -97,6 +97,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
} }
w.Sync()
return w, nil return w, nil
} }

View File

@ -25,6 +25,7 @@ import (
"testing" "testing"
"github.com/coreos/etcd/raft/raftpb" "github.com/coreos/etcd/raft/raftpb"
"github.com/coreos/etcd/wal/walpb"
) )
func TestNew(t *testing.T) { func TestNew(t *testing.T) {
@ -34,14 +35,33 @@ func TestNew(t *testing.T) {
} }
defer os.RemoveAll(p) defer os.RemoveAll(p)
w, err := Create(p, nil) w, err := Create(p, []byte("somedata"))
if err != nil { if err != nil {
t.Fatalf("err = %v, want nil", err) t.Fatalf("err = %v, want nil", err)
} }
if g := path.Base(w.f.Name()); g != walName(0, 0) { if g := path.Base(w.f.Name()); g != walName(0, 0) {
t.Errorf("name = %+v, want %+v", g, walName(0, 0)) t.Errorf("name = %+v, want %+v", g, walName(0, 0))
} }
w.Close() defer w.Close()
gd, err := ioutil.ReadFile(w.f.Name())
if err != nil {
t.Fatalf("err = %v, want nil", err)
}
var wb bytes.Buffer
e := newEncoder(&wb, 0)
err = e.encode(&walpb.Record{Type: crcType, Crc: 0})
if err != nil {
t.Fatalf("err = %v, want nil", err)
}
err = e.encode(&walpb.Record{Type: metadataType, Data: []byte("somedata")})
if 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())
}
} }
func TestNewForInitedDir(t *testing.T) { func TestNewForInitedDir(t *testing.T) {