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(context.Background())) }() var putPrm PutPrm for range objectsCount / 2 { 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 range objectsCount / 2 { 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(context.Background())) 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(context.Background())) }