wal: recover writting seq

This commit is contained in:
Xiang Li
2014-09-14 15:33:52 -07:00
parent 21860bc017
commit 1164c4b83d
2 changed files with 19 additions and 4 deletions

View File

@@ -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
}

View File

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