[#776] cmd/node: Configure write-cache size limit

Add `size_limit` config value to write-cache section. Add `SizeLimit` method
of `writecache.Config` type. Pass its value to `WithMaxCacheSize` option on
app construction.

Reflect config update in examples. Cover new value in unit test.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2021-09-08 12:46:12 +03:00 committed by Alex Vanin
parent a1696a81b6
commit 368e280413
6 changed files with 30 additions and 2 deletions

View file

@ -369,6 +369,7 @@ func initShardOptions(c *cfg) {
writecache.WithMaxObjectSize(writeCacheCfg.MaxObjectSize()),
writecache.WithSmallObjectSize(writeCacheCfg.SmallObjectSize()),
writecache.WithFlushWorkersCount(writeCacheCfg.WorkersNumber()),
writecache.WithMaxCacheSize(writeCacheCfg.SizeLimit()),
}
}

View file

@ -44,6 +44,7 @@ func TestEngineSection(t *testing.T) {
require.EqualValues(t, 16384, wc.SmallObjectSize())
require.EqualValues(t, 134217728, wc.MaxObjectSize())
require.EqualValues(t, 30, wc.WorkersNumber())
require.EqualValues(t, 3221225472, wc.SizeLimit())
require.Equal(t, "tmp/0/meta", meta.Path())
require.Equal(t, fs.FileMode(0644), meta.Perm())
@ -69,6 +70,7 @@ func TestEngineSection(t *testing.T) {
require.EqualValues(t, 16384, wc.SmallObjectSize())
require.EqualValues(t, 134217728, wc.MaxObjectSize())
require.EqualValues(t, 30, wc.WorkersNumber())
require.EqualValues(t, 4294967296, wc.SizeLimit())
require.Equal(t, "tmp/1/meta", meta.Path())
require.Equal(t, fs.FileMode(0644), meta.Perm())

View file

@ -21,6 +21,9 @@ const (
// WorkersNumberDefault is a default number of workers.
WorkersNumberDefault = 20
// SizeLimitDefault is a default write-cache size limit.
SizeLimitDefault = 1 << 30
)
// From wraps config section into Config.
@ -107,3 +110,19 @@ func (x *Config) WorkersNumber() int {
return WorkersNumberDefault
}
// SizeLimit returns value of "size_limit" config parameter.
//
// Returns SizeLimitDefault if value is not a positive number.
func (x *Config) SizeLimit() uint64 {
c := config.UintSafe(
(*config.Config)(x),
"size_limit",
)
if c > 0 {
return c
}
return SizeLimitDefault
}