forked from TrueCloudLab/frostfs-node
[#216] blobstor: Classify objects by size according to binary format
In previous implementation objects were classified by size according to payload size. From now they are classified by the size of their binary representation. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
40b09f9266
commit
bce16de72a
1 changed files with 6 additions and 13 deletions
|
@ -6,7 +6,6 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
objectSDK "github.com/nspcc-dev/neofs-api-go/pkg/object"
|
objectSDK "github.com/nspcc-dev/neofs-api-go/pkg/object"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/core/object"
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -35,10 +34,10 @@ func (b *BlobStor) Put(prm *PutPrm) (*PutRes, error) {
|
||||||
return nil, errors.Wrap(err, "could not marshal the object")
|
return nil, errors.Wrap(err, "could not marshal the object")
|
||||||
}
|
}
|
||||||
|
|
||||||
// compress object data
|
if b.isBig(data) {
|
||||||
data = b.compressor(data)
|
// compress object data
|
||||||
|
data = b.compressor(data)
|
||||||
|
|
||||||
if b.isBig(prm.obj) {
|
|
||||||
// save object in shallow dir
|
// save object in shallow dir
|
||||||
return nil, b.fsTree.put(prm.obj.Address(), data)
|
return nil, b.fsTree.put(prm.obj.Address(), data)
|
||||||
} else {
|
} else {
|
||||||
|
@ -46,7 +45,7 @@ func (b *BlobStor) Put(prm *PutPrm) (*PutRes, error) {
|
||||||
|
|
||||||
// FIXME: use Blobovnicza when it becomes implemented.
|
// FIXME: use Blobovnicza when it becomes implemented.
|
||||||
// Temporary save in shallow dir.
|
// Temporary save in shallow dir.
|
||||||
return nil, b.fsTree.put(prm.obj.Address(), data)
|
return nil, b.fsTree.put(prm.obj.Address(), b.compressor(data))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,12 +60,6 @@ func (t *fsTree) put(addr *objectSDK.Address, data []byte) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// checks if object is "big".
|
// checks if object is "big".
|
||||||
func (b *BlobStor) isBig(obj *object.Object) bool {
|
func (b *BlobStor) isBig(data []byte) bool {
|
||||||
// FIXME: headers are temporary ignored
|
return uint64(len(data)) > b.smallSizeLimit
|
||||||
// due to slight impact in size.
|
|
||||||
// In fact, we have to honestly calculate the size
|
|
||||||
// in binary format, which requires Size() method.
|
|
||||||
sz := obj.PayloadSize()
|
|
||||||
|
|
||||||
return sz > b.smallSizeLimit
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue