package pilorama import ( "context" "os" "path/filepath" "runtime" "sync/atomic" "testing" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" "github.com/stretchr/testify/require" ) func getTimestamp(reorder int, ts Timestamp) Timestamp { base := ts / Timestamp(reorder) rem := ts % Timestamp(reorder) return base*Timestamp(reorder) + Timestamp(reorder) - rem } func BenchmarkCreate(b *testing.B) { // Use `os.TempDir` because we construct multiple times in the same test. tmpDir, err := os.MkdirTemp(os.TempDir(), "*") require.NoError(b, err) f := NewBoltForest( WithPath(filepath.Join(tmpDir, "test.db")), WithMaxBatchSize(runtime.GOMAXPROCS(0))) require.NoError(b, f.Open(context.Background(), false)) require.NoError(b, f.Init()) defer func() { require.NoError(b, f.Close()) }() b.Cleanup(func() { require.NoError(b, os.RemoveAll(tmpDir)) }) cid := cidtest.ID() treeID := "tree" ctx := context.Background() var index atomic.Int32 index.Store(-1) b.SetParallelism(2) b.RunParallel(func(pb *testing.PB) { for pb.Next() { i := index.Add(1) op := &Move{ Meta: Meta{Time: getTimestamp(runtime.GOMAXPROCS(0)*2, Timestamp(i+1))}, Child: Node(i + 1), Parent: RootID, } if err := f.TreeApply(ctx, cid, treeID, op, true); err != nil { b.FailNow() } } }) }