frostfs-node/pkg/local_object_storage/shard/refill_test.go

77 lines
1.8 KiB
Go

package shard
import (
"context"
"os"
"testing"
shardconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/engine/shard"
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil"
oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test"
"github.com/stretchr/testify/require"
)
func BenchmarkRefillMetabase(b *testing.B) {
b.Run("100 objects", func(b *testing.B) {
benchRefillMetabase(b, 100)
})
b.Run("1000 objects", func(b *testing.B) {
benchRefillMetabase(b, 1000)
})
b.Run("2000 objects", func(b *testing.B) {
benchRefillMetabase(b, 2000)
})
b.Run("5000 objects", func(b *testing.B) {
benchRefillMetabase(b, 5000)
})
}
func benchRefillMetabase(b *testing.B, objectsCount int) {
sh := newCustomShard(b, false, shardOptions{
additionalShardOptions: []Option{WithRefillMetabaseWorkersCount(shardconfig.RefillMetabaseWorkersCountDefault)},
})
defer func() { require.NoError(b, sh.Close()) }()
var putPrm PutPrm
for i := 0; i < objectsCount/2; i++ {
obj := testutil.GenerateObject()
testutil.AddAttribute(obj, "foo", "bar")
testutil.AddPayload(obj, 1<<5) // blobvnicza tree obj
putPrm.SetObject(obj)
_, err := sh.Put(context.Background(), putPrm)
require.NoError(b, err)
}
for i := 0; i < objectsCount/2; i++ {
obj := testutil.GenerateObject()
testutil.AddAttribute(obj, "foo", "bar")
obj.SetID(oidtest.ID())
testutil.AddPayload(obj, 1<<20) // fstree obj
putPrm.SetObject(obj)
_, err := sh.Put(context.Background(), putPrm)
require.NoError(b, err)
}
require.NoError(b, sh.Close())
require.NoError(b, os.Remove(sh.metaBase.DumpInfo().Path))
require.NoError(b, sh.Open(context.Background()))
sh.cfg.refillMetabase = true
b.ReportAllocs()
b.ResetTimer()
require.NoError(b, sh.Init(context.Background()))
require.NoError(b, sh.Close())
}