2024-03-05 10:41:15 +00:00
|
|
|
package shard
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
|
2024-03-05 12:39:50 +00:00
|
|
|
shardconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/engine/shard"
|
2024-03-05 10:41:15 +00:00
|
|
|
"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) {
|
2024-03-05 12:39:50 +00:00
|
|
|
sh := newCustomShard(b, false, shardOptions{
|
|
|
|
additionalShardOptions: []Option{WithRefillMetabaseWorkersCount(shardconfig.RefillMetabaseWorkersCountDefault)},
|
|
|
|
})
|
|
|
|
|
2024-03-05 10:41:15 +00:00
|
|
|
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())
|
|
|
|
}
|