diff --git a/internal/logs/logs.go b/internal/logs/logs.go index e8472357c..7a7fc1a98 100644 --- a/internal/logs/logs.go +++ b/internal/logs/logs.go @@ -515,5 +515,6 @@ const ( RuntimeSoftMemoryDefinedWithGOMEMLIMIT = "soft runtime memory defined with GOMEMLIMIT environment variable, config value skipped" FailedToCountWritecacheItems = "failed to count writecache items" AttemtToCloseAlreadyClosedBlobovnicza = "attempt to close an already closed blobovnicza" + BadgerStoreGCFailed = "failed to run GC on badgerstore" FailedToGetContainerCounters = "failed to get container counters values" ) diff --git a/pkg/local_object_storage/blobstor/badgerstore/config.go b/pkg/local_object_storage/blobstor/badgerstore/config.go index 714a685ed..9156f63f2 100644 --- a/pkg/local_object_storage/blobstor/badgerstore/config.go +++ b/pkg/local_object_storage/blobstor/badgerstore/config.go @@ -6,8 +6,10 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/compression" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" "github.com/dgraph-io/badger/v4" "github.com/dgraph-io/badger/v4/options" + "go.uber.org/zap" ) type cfg struct { @@ -17,6 +19,7 @@ type cfg struct { gcTimeout time.Duration gcDiscardRatio float64 metrics Metrics + logger *logger.Logger } type Option func(*cfg) @@ -52,11 +55,12 @@ func defaultCfg() *cfg { opts.ValueThreshold = 0 // to store all values in vLog return &cfg{ - permissions: 0700, + permissions: 0o700, db: opts, gcTimeout: 10 * time.Minute, gcDiscardRatio: 0.2, // for 1GB vLog file GC will perform only if around 200MB could be free metrics: &noopMetrics{}, + logger: &logger.Logger{Logger: zap.L()}, } } @@ -123,3 +127,10 @@ func WithMetrics(m Metrics) Option { c.metrics = m } } + +// WithLogger sets logger. +func WithLogger(l *logger.Logger) Option { + return func(c *cfg) { + c.logger = l + } +} diff --git a/pkg/local_object_storage/blobstor/badgerstore/control.go b/pkg/local_object_storage/blobstor/badgerstore/control.go index 07ddf235b..321094080 100644 --- a/pkg/local_object_storage/blobstor/badgerstore/control.go +++ b/pkg/local_object_storage/blobstor/badgerstore/control.go @@ -5,8 +5,10 @@ import ( "fmt" "time" + "git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util" "github.com/dgraph-io/badger/v4" + "go.uber.org/zap" ) // Close implements common.Storage. @@ -61,6 +63,8 @@ func (s *Store) startGC() { case <-t.C: if err := s.db.RunValueLogGC(s.cfg.gcDiscardRatio); err == nil { _ = s.db.RunValueLogGC(s.cfg.gcDiscardRatio) // see https://dgraph.io/docs/badger/get-started/#garbage-collection + } else { + s.cfg.logger.Error(logs.BadgerStoreGCFailed, zap.Error(err), zap.String("path", s.cfg.db.Dir)) } } }()