mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
wal: recover writting seq
This commit is contained in:
10
wal/wal.go
10
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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user