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
|
||||
|
||||
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.
|
||||
type Blobovnicza struct {
|
||||
*cfg
|
||||
|
||||
filled *atomic.Uint64
|
||||
|
||||
boltDB *bbolt.DB
|
||||
}
|
||||
|
||||
// Option is an option of Blobovnicza's constructor.
|
||||
type Option func(*cfg)
|
||||
|
||||
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 {
|
||||
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.
|
||||
|
@ -24,6 +59,52 @@ func New(opts ...Option) *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