forked from TrueCloudLab/frostfs-node
[#216] blobovnicza: Add configuration values
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
bce16de72a
commit
52b0c1f19a
1 changed files with 83 additions and 2 deletions
|
@ -1,18 +1,53 @@
|
||||||
package blobovnicza
|
package blobovnicza
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neofs-node/pkg/util/logger"
|
||||||
|
"go.etcd.io/bbolt"
|
||||||
|
"go.uber.org/atomic"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
// Blobovnicza represents the implementation of NeoFS Blobovnicza.
|
// Blobovnicza represents the implementation of NeoFS Blobovnicza.
|
||||||
type Blobovnicza struct {
|
type Blobovnicza struct {
|
||||||
*cfg
|
*cfg
|
||||||
|
|
||||||
|
filled *atomic.Uint64
|
||||||
|
|
||||||
|
boltDB *bbolt.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
// Option is an option of Blobovnicza's constructor.
|
// Option is an option of Blobovnicza's constructor.
|
||||||
type Option func(*cfg)
|
type Option func(*cfg)
|
||||||
|
|
||||||
type cfg struct {
|
type cfg struct {
|
||||||
|
boltDBCfg
|
||||||
|
|
||||||
|
fullSizeLimit uint64
|
||||||
|
|
||||||
|
objSizeLimit uint64
|
||||||
|
|
||||||
|
log *logger.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
type boltDBCfg struct {
|
||||||
|
perm os.FileMode
|
||||||
|
|
||||||
|
path string
|
||||||
|
|
||||||
|
boltOptions *bbolt.Options
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultCfg() *cfg {
|
func defaultCfg() *cfg {
|
||||||
return &cfg{}
|
return &cfg{
|
||||||
|
boltDBCfg: boltDBCfg{
|
||||||
|
perm: os.ModePerm, // 0777
|
||||||
|
},
|
||||||
|
fullSizeLimit: 1 << 30, // 1GB
|
||||||
|
objSizeLimit: 1 << 20, // 1MB
|
||||||
|
log: zap.L(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates and returns new Blobovnicza instance.
|
// New creates and returns new Blobovnicza instance.
|
||||||
|
@ -24,6 +59,52 @@ func New(opts ...Option) *Blobovnicza {
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Blobovnicza{
|
return &Blobovnicza{
|
||||||
cfg: c,
|
cfg: c,
|
||||||
|
filled: atomic.NewUint64(0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithPath returns option to set system path to Blobovnicza.
|
||||||
|
func WithPath(path string) Option {
|
||||||
|
return func(c *cfg) {
|
||||||
|
c.path = path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithPermissions returns option to specify permission bits
|
||||||
|
// of Blobovnicza's system path.
|
||||||
|
func WithPermissions(perm os.FileMode) Option {
|
||||||
|
return func(c *cfg) {
|
||||||
|
c.perm = perm
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithSizeLimit returns option to specify maximum size
|
||||||
|
// of the objects stored in Blobovnicza.
|
||||||
|
func WithObjectSizeLimit(lim uint64) Option {
|
||||||
|
return func(c *cfg) {
|
||||||
|
c.objSizeLimit = lim
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithFullSizeLimit returns option to set maximum sum size
|
||||||
|
// of all stored objects.
|
||||||
|
func WithFullSizeLimit(lim uint64) Option {
|
||||||
|
return func(c *cfg) {
|
||||||
|
c.fullSizeLimit = lim
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithLogger returns option to specify Blobovnicza's logger.
|
||||||
|
func WithLogger(l *logger.Logger) Option {
|
||||||
|
return func(c *cfg) {
|
||||||
|
c.log = l.With(zap.String("component", "Blobovnicza"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithBoltDBOptions returns option to specify BoltDB options.
|
||||||
|
func WithBoltDBOptions(opts *bbolt.Options) Option {
|
||||||
|
return func(c *cfg) {
|
||||||
|
c.boltOptions = opts
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue