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()