forked from TrueCloudLab/frostfs-node
[#321] shard/test: Parallelize TestShard_List
``` go test -count=1 -run TestShard_List -race . Before: 2.492s After: 0.109s ``` Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
47b0ec33c3
commit
969bfb603f
1 changed files with 34 additions and 23 deletions
|
@ -2,6 +2,7 @@ package shard_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
|
||||||
|
@ -9,22 +10,21 @@ import (
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
|
||||||
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
|
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestShard_List(t *testing.T) {
|
func TestShard_List(t *testing.T) {
|
||||||
sh := newShard(t, false)
|
|
||||||
shWC := newShard(t, true)
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
releaseShard(sh, t)
|
|
||||||
releaseShard(shWC, t)
|
|
||||||
}()
|
|
||||||
|
|
||||||
t.Run("without write cache", func(t *testing.T) {
|
t.Run("without write cache", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
sh := newShard(t, false)
|
||||||
|
defer releaseShard(sh, t)
|
||||||
testShardList(t, sh)
|
testShardList(t, sh)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("with write cache", func(t *testing.T) {
|
t.Run("with write cache", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
shWC := newShard(t, true)
|
||||||
|
defer releaseShard(shWC, t)
|
||||||
testShardList(t, shWC)
|
testShardList(t, shWC)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -33,30 +33,41 @@ func testShardList(t *testing.T, sh *shard.Shard) {
|
||||||
const C = 10
|
const C = 10
|
||||||
const N = 5
|
const N = 5
|
||||||
|
|
||||||
|
var mtx sync.Mutex
|
||||||
objs := make(map[string]int)
|
objs := make(map[string]int)
|
||||||
var putPrm shard.PutPrm
|
|
||||||
|
|
||||||
|
var errG errgroup.Group
|
||||||
|
errG.SetLimit(C * N)
|
||||||
for i := 0; i < C; i++ {
|
for i := 0; i < C; i++ {
|
||||||
cnr := cidtest.ID()
|
errG.Go(func() error {
|
||||||
|
cnr := cidtest.ID()
|
||||||
|
|
||||||
for j := 0; j < N; j++ {
|
for j := 0; j < N; j++ {
|
||||||
obj := testutil.GenerateObjectWithCID(cnr)
|
errG.Go(func() error {
|
||||||
testutil.AddPayload(obj, 1<<2)
|
obj := testutil.GenerateObjectWithCID(cnr)
|
||||||
|
testutil.AddPayload(obj, 1<<2)
|
||||||
|
|
||||||
// add parent as virtual object, it must be ignored in List()
|
// add parent as virtual object, it must be ignored in List()
|
||||||
parent := testutil.GenerateObjectWithCID(cnr)
|
parent := testutil.GenerateObjectWithCID(cnr)
|
||||||
idParent, _ := parent.ID()
|
idParent, _ := parent.ID()
|
||||||
obj.SetParentID(idParent)
|
obj.SetParentID(idParent)
|
||||||
obj.SetParent(parent)
|
obj.SetParent(parent)
|
||||||
|
|
||||||
objs[object.AddressOf(obj).EncodeToString()] = 0
|
mtx.Lock()
|
||||||
|
objs[object.AddressOf(obj).EncodeToString()] = 0
|
||||||
|
mtx.Unlock()
|
||||||
|
|
||||||
putPrm.SetObject(obj)
|
var putPrm shard.PutPrm
|
||||||
|
putPrm.SetObject(obj)
|
||||||
|
|
||||||
_, err := sh.Put(context.Background(), putPrm)
|
_, err := sh.Put(context.Background(), putPrm)
|
||||||
require.NoError(t, err)
|
return err
|
||||||
}
|
})
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
require.NoError(t, errG.Wait())
|
||||||
|
|
||||||
res, err := sh.List()
|
res, err := sh.List()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
Loading…
Reference in a new issue