From 1164c4b83d823b16505e5c0d76020c6ea20dc0c0 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Sun, 14 Sep 2014 15:33:52 -0700 Subject: [PATCH] wal: recover writting seq --- wal/wal.go | 10 ++++++++-- wal/wal_test.go | 13 +++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/wal/wal.go b/wal/wal.go index d5fd1226c..a33ed040f 100644 --- a/wal/wal.go +++ b/wal/wal.go @@ -60,7 +60,7 @@ type WAL struct { decoder *decoder // decoder to decode records f *os.File // underlay file opened for appending, sync - seq int64 // current sequence of the wal file + seq int64 // current sequence of the wal file to be written enti int64 // index of the last entry that has been saved to wal encoder *encoder // encoder to encode records } @@ -127,6 +127,11 @@ func OpenAtIndex(dirpath string, index int64) (*WAL, error) { rc := MultiReadCloser(rcs...) // open the lastest wal file for appending + seq, _, err := parseWalName(names[len(names)-1]) + if err != nil { + rc.Close() + return nil, err + } last := path.Join(dirpath, names[len(names)-1]) f, err := os.OpenFile(last, os.O_WRONLY|os.O_APPEND, 0) if err != nil { @@ -139,7 +144,8 @@ func OpenAtIndex(dirpath string, index int64) (*WAL, error) { ri: index, decoder: newDecoder(rc), - f: f, + f: f, + seq: seq, } return w, nil } diff --git a/wal/wal_test.go b/wal/wal_test.go index 2724dc805..7cd092f81 100644 --- a/wal/wal_test.go +++ b/wal/wal_test.go @@ -77,13 +77,22 @@ func TestOpenAtIndex(t *testing.T) { t.Fatal(err) } f.Close() + writef := fmt.Sprintf("%016x-%016x.wal", 1, 4) + f, err = os.Create(path.Join(dir, writef)) + if err != nil { + t.Fatal(err) + } + f.Close() w, err := OpenAtIndex(dir, 0) if err != nil { t.Fatalf("err = %v, want nil", err) } - if g := path.Base(w.f.Name()); g != firstWalName { - t.Errorf("name = %+v, want %+v", g, firstWalName) + if g := path.Base(w.f.Name()); g != writef { + t.Errorf("name = %+v, want %+v", g, writef) + } + if w.seq != 1 { + t.Errorf("seq = %d, want %d", w.seq, 1) } w.Close()