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 a5a33cbe4c
commit eef5e220a6

View File

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