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:
Vladimir Sokolov 2022-09-04 01:41:16 +03:00 committed by Vladimir Sokolov
parent b2b7b9d535
commit 1ed5dfc20e

View File

@ -652,24 +652,31 @@ func TestOpenWithMaxIndex(t *testing.T) {
}
defer os.RemoveAll(p)
// create WAL
w, err := Create(zap.NewExample(), p, nil)
w1, err := Create(zap.NewExample(), p, nil)
if err != nil {
t.Fatal(err)
}
defer w.Close()
defer func() {
if w1 != nil {
w1.Close()
}
}()
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)
}
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 {
t.Fatal(err)
}
_, _, _, err = w.ReadAll()
if err == nil || err != ErrSliceOutOfRange {
defer w2.Close()
_, _, _, err = w2.ReadAll()
if err != ErrSliceOutOfRange {
t.Fatalf("err = %v, want ErrSliceOutOfRange", err)
}
}