mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
testing: fix TestOpenWithMaxIndex cleanup
A WAL object was closed by defer, however the WAL was rewritten afterwards, so defer closed already closed WAL but not the new one. It caused a data race between writing file and cleaning up a temporary test directory, which led to a non-deterministic bug. Fixes #14332 Signed-off-by: Vladimir Sokolov <vsvastey@gmail.com>
This commit is contained in:
parent
a5a33cbe4c
commit
eef5e220a6
@ -691,24 +691,31 @@ func TestOpenWithMaxIndex(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer os.RemoveAll(p)
|
defer os.RemoveAll(p)
|
||||||
// create WAL
|
// create WAL
|
||||||
w, err := Create(zap.NewExample(), p, nil)
|
w1, err := Create(zap.NewExample(), p, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
defer w.Close()
|
defer func() {
|
||||||
|
if w1 != nil {
|
||||||
|
w1.Close()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
es := []raftpb.Entry{{Index: uint64(math.MaxInt64)}}
|
es := []raftpb.Entry{{Index: uint64(math.MaxInt64)}}
|
||||||
if err = w.Save(raftpb.HardState{}, es); err != nil {
|
if err = w1.Save(raftpb.HardState{}, es); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
w.Close()
|
w1.Close()
|
||||||
|
w1 = nil
|
||||||
|
|
||||||
w, err = Open(zap.NewExample(), p, walpb.Snapshot{})
|
w2, err := Open(zap.NewExample(), p, walpb.Snapshot{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
_, _, _, err = w.ReadAll()
|
defer w2.Close()
|
||||||
if err == nil || err != ErrSliceOutOfRange {
|
|
||||||
|
_, _, _, err = w2.ReadAll()
|
||||||
|
if err != ErrSliceOutOfRange {
|
||||||
t.Fatalf("err = %v, want ErrSliceOutOfRange", err)
|
t.Fatalf("err = %v, want ErrSliceOutOfRange", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user