forked from TrueCloudLab/frostfs-node
[#1367] writecache: Add background flushing objects limiter
To limit memory usage by background flush. Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
8a6e3025a0
commit
e39378b1c3
12 changed files with 184 additions and 35 deletions
27
pkg/local_object_storage/writecache/limiter_test.go
Normal file
27
pkg/local_object_storage/writecache/limiter_test.go
Normal file
|
@ -0,0 +1,27 @@
|
|||
package writecache
|
||||
|
||||
import (
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
func TestLimiter(t *testing.T) {
|
||||
var maxSize uint64 = 10
|
||||
var single uint64 = 3
|
||||
l := newFlushLimiter(uint64(maxSize))
|
||||
var currSize atomic.Int64
|
||||
var eg errgroup.Group
|
||||
for i := 0; i < 10_000; i++ {
|
||||
eg.Go(func() error {
|
||||
defer l.release(single)
|
||||
defer currSize.Add(-1)
|
||||
l.acquire(single)
|
||||
require.True(t, currSize.Add(1) <= 3)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
require.NoError(t, eg.Wait())
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue