[#337] engine: Get all container sizes estimation from shards
Objects of one container can be split among shards, so engine should iterate over all available shards to sum all size estimations. Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
dc5a481f17
commit
3926e76c32
1 changed files with 59 additions and 0 deletions
59
pkg/local_object_storage/engine/container.go
Normal file
59
pkg/local_object_storage/engine/container.go
Normal file
|
@ -0,0 +1,59 @@
|
|||
package engine
|
||||
|
||||
import (
|
||||
"github.com/nspcc-dev/neofs-api-go/pkg/container"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/shard"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type ContainerSizePrm struct {
|
||||
cid *container.ID
|
||||
}
|
||||
|
||||
type ContainerSizeRes struct {
|
||||
size uint64
|
||||
}
|
||||
|
||||
func (p *ContainerSizePrm) WithContainerID(cid *container.ID) *ContainerSizePrm {
|
||||
if p != nil {
|
||||
p.cid = cid
|
||||
}
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
func (r *ContainerSizeRes) Size() uint64 {
|
||||
return r.size
|
||||
}
|
||||
|
||||
// ContainerSize returns sum of estimation container sizes among all shards.
|
||||
func (e *StorageEngine) ContainerSize(prm *ContainerSizePrm) *ContainerSizeRes {
|
||||
return &ContainerSizeRes{
|
||||
size: e.containerSize(prm.cid),
|
||||
}
|
||||
}
|
||||
|
||||
// ContainerSize returns sum of estimation container sizes among all shards.
|
||||
func ContainerSize(e *StorageEngine, id *container.ID) uint64 {
|
||||
return e.ContainerSize(&ContainerSizePrm{cid: id}).Size()
|
||||
}
|
||||
|
||||
func (e *StorageEngine) containerSize(id *container.ID) (total uint64) {
|
||||
e.iterateOverUnsortedShards(func(s *shard.Shard) (stop bool) {
|
||||
size, err := shard.ContainerSize(s, id)
|
||||
if err != nil {
|
||||
e.log.Warn("can't get container size",
|
||||
zap.Stringer("shard_id", s.ID()),
|
||||
zap.Stringer("container_id", id),
|
||||
zap.String("error", err.Error()))
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
total += size
|
||||
|
||||
return false
|
||||
})
|
||||
|
||||
return total
|
||||
}
|
Loading…
Reference in a new issue