[#615] pilorama: Speedup TestForest_ApplyRandom()

Some of our pilorama tests fail on CI.
The reasons are not obvious, but one possible improvement
is using `WithNoSync` option for these. It should have much effect,
because we are writing on the tmpfs, but doesn't hurt anyway.

If I replace `t.TempDir()` with a local directory, test execution time
goes down from 5s (sync) to 0.4s (nosync), which is the same time as
with `t.TempDir()`. Maybe we have some strange CI configuration.

```
panic: test timed out after 10m0s
running tests:
	TestForest_ApplyRandom (8m22s)
	TestForest_ApplyRandom/bbolt (8m21s)
...
goroutine 170 [syscall]:
syscall.Syscall(0xc000100000?, 0xc00047b758?, 0x6aff9a?, 0xc00041c1b0?)
	/opt/hostedtoolcache/go/1.20.7/x64/src/syscall/syscall_linux.go:69 +0x27
syscall.Fdatasync(0x9e35c0?)
	/opt/hostedtoolcache/go/1.20.7/x64/src/syscall/zsyscall_linux_amd64.go:418 +0x2a
go.etcd.io/bbolt.fdatasync(0xc000189000?)
```

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
Evgenii Stratonikov 2023-08-16 12:28:19 +03:00 committed by Evgenii Stratonikov
parent 2efe9cc1be
commit 5335e7089e

View file

@ -825,7 +825,7 @@ func testForestTreeParallelApply(t *testing.T, constructor func(t testing.TB, _
cid := cidtest.ID() cid := cidtest.ID()
treeID := "version" treeID := "version"
expected := constructor(t) expected := constructor(t, WithNoSync(true))
for i := range ops { for i := range ops {
require.NoError(t, expected.TreeApply(context.Background(), cid, treeID, &ops[i], false)) require.NoError(t, expected.TreeApply(context.Background(), cid, treeID, &ops[i], false))
} }
@ -834,7 +834,7 @@ func testForestTreeParallelApply(t *testing.T, constructor func(t testing.TB, _
// Shuffle random operations, leave initialization in place. // Shuffle random operations, leave initialization in place.
r.Shuffle(len(ops), func(i, j int) { ops[i], ops[j] = ops[j], ops[i] }) r.Shuffle(len(ops), func(i, j int) { ops[i], ops[j] = ops[j], ops[i] })
actual := constructor(t, WithMaxBatchSize(batchSize)) actual := constructor(t, WithMaxBatchSize(batchSize), WithNoSync(true))
wg := new(sync.WaitGroup) wg := new(sync.WaitGroup)
ch := make(chan *Move) ch := make(chan *Move)
for i := 0; i < batchSize; i++ { for i := 0; i < batchSize; i++ {
@ -870,7 +870,7 @@ func testForestTreeApplyRandom(t *testing.T, constructor func(t testing.TB, _ ..
cid := cidtest.ID() cid := cidtest.ID()
treeID := "version" treeID := "version"
expected := constructor(t) expected := constructor(t, WithNoSync(true))
for i := range ops { for i := range ops {
require.NoError(t, expected.TreeApply(context.Background(), cid, treeID, &ops[i], false)) require.NoError(t, expected.TreeApply(context.Background(), cid, treeID, &ops[i], false))
} }
@ -880,7 +880,7 @@ func testForestTreeApplyRandom(t *testing.T, constructor func(t testing.TB, _ ..
// Shuffle random operations, leave initialization in place. // Shuffle random operations, leave initialization in place.
r.Shuffle(len(ops), func(i, j int) { ops[i], ops[j] = ops[j], ops[i] }) r.Shuffle(len(ops), func(i, j int) { ops[i], ops[j] = ops[j], ops[i] })
actual := constructor(t) actual := constructor(t, WithNoSync(true))
for i := range ops { for i := range ops {
require.NoError(t, actual.TreeApply(context.Background(), cid, treeID, &ops[i], false)) require.NoError(t, actual.TreeApply(context.Background(), cid, treeID, &ops[i], false))
} }