package writecache import ( "math" "sync/atomic" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/fstree" ) func (c *cache) estimateCacheSize() (uint64, uint64) { fsCount := c.objCounters.FS() fsSize := fsCount * c.maxObjectSize c.metrics.SetEstimateSize(0, fsSize) c.metrics.SetActualCounters(0, fsCount) return fsCount, fsSize } func (c *cache) hasEnoughSpaceFS() bool { return c.hasEnoughSpace(c.maxObjectSize) } func (c *cache) hasEnoughSpace(objectSize uint64) bool { count, size := c.estimateCacheSize() if c.maxCacheCount > 0 && count+1 > c.maxCacheCount { return false } return c.maxCacheSize >= size+objectSize } var _ fstree.FileCounter = &counters{} type counters struct { cFS atomic.Uint64 } func (x *counters) FS() uint64 { return x.cFS.Load() } // Set implements fstree.ObjectCounter. func (x *counters) Set(v uint64) { x.cFS.Store(v) } // Inc implements fstree.ObjectCounter. func (x *counters) Inc() { x.cFS.Add(1) } // Dec implements fstree.ObjectCounter. func (x *counters) Dec() { x.cFS.Add(math.MaxUint64) } func (c *cache) initCounters() error { c.estimateCacheSize() return nil }