forked from TrueCloudLab/frostfs-node
[#1561] object: Return OUT_OF_RANGE
status
Replace `ErrRangeOutOfBounds` error from `pkg/core/object` package with `ObjectOutOfRange` from `apistatus` package. That error is returned by storage node's server as NeoFS API statuses. Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
parent
ccba07fe19
commit
9f7a22e2aa
11 changed files with 46 additions and 27 deletions
|
@ -10,7 +10,6 @@ import (
|
|||
|
||||
"github.com/hashicorp/golang-lru/simplelru"
|
||||
"github.com/nspcc-dev/hrw"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/core/object"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobovnicza"
|
||||
storagelog "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/internal/log"
|
||||
apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status"
|
||||
|
@ -331,7 +330,7 @@ func (b *blobovniczas) getRange(prm GetRangeSmallPrm) (res GetRangeSmallRes, err
|
|||
|
||||
res, err = b.getRangeFromLevel(prm, p, !ok)
|
||||
if err != nil {
|
||||
outOfBounds := errors.Is(err, object.ErrRangeOutOfBounds)
|
||||
outOfBounds := isErrOutOfRange(err)
|
||||
if !blobovnicza.IsErrNotFound(err) && !outOfBounds {
|
||||
b.log.Debug("could not get object from level",
|
||||
zap.String("level", p),
|
||||
|
@ -498,7 +497,7 @@ func (b *blobovniczas) getRangeFromLevel(prm GetRangeSmallPrm, blzPath string, t
|
|||
res, err := b.getObjectRange(v.(*blobovnicza.Blobovnicza), prm)
|
||||
switch {
|
||||
case err == nil,
|
||||
errors.Is(err, object.ErrRangeOutOfBounds):
|
||||
isErrOutOfRange(err):
|
||||
return res, err
|
||||
default:
|
||||
if !blobovnicza.IsErrNotFound(err) {
|
||||
|
@ -523,7 +522,7 @@ func (b *blobovniczas) getRangeFromLevel(prm GetRangeSmallPrm, blzPath string, t
|
|||
res, err := b.getObjectRange(active.blz, prm)
|
||||
switch {
|
||||
case err == nil,
|
||||
errors.Is(err, object.ErrRangeOutOfBounds):
|
||||
isErrOutOfRange(err):
|
||||
return res, err
|
||||
default:
|
||||
if !blobovnicza.IsErrNotFound(err) {
|
||||
|
@ -630,7 +629,9 @@ func (b *blobovniczas) getObjectRange(blz *blobovnicza.Blobovnicza, prm GetRange
|
|||
payload := obj.Payload()
|
||||
|
||||
if uint64(len(payload)) < to {
|
||||
return GetRangeSmallRes{}, object.ErrRangeOutOfBounds
|
||||
var errOutOfRange apistatus.ObjectOutOfRange
|
||||
|
||||
return GetRangeSmallRes{}, errOutOfRange
|
||||
}
|
||||
|
||||
return GetRangeSmallRes{
|
||||
|
|
11
pkg/local_object_storage/blobstor/errors.go
Normal file
11
pkg/local_object_storage/blobstor/errors.go
Normal file
|
@ -0,0 +1,11 @@
|
|||
package blobstor
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status"
|
||||
)
|
||||
|
||||
func isErrOutOfRange(err error) bool {
|
||||
return errors.As(err, new(apistatus.ObjectOutOfRange))
|
||||
}
|
|
@ -4,7 +4,6 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/nspcc-dev/neofs-node/pkg/core/object"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/fstree"
|
||||
apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status"
|
||||
objectSDK "github.com/nspcc-dev/neofs-sdk-go/object"
|
||||
|
@ -56,7 +55,9 @@ func (b *BlobStor) GetRangeBig(prm GetRangeBigPrm) (GetRangeBigRes, error) {
|
|||
ln, off := prm.rng.GetLength(), prm.rng.GetOffset()
|
||||
|
||||
if pLen := uint64(len(payload)); pLen < ln+off {
|
||||
return GetRangeBigRes{}, object.ErrRangeOutOfBounds
|
||||
var errOutOfRange apistatus.ObjectOutOfRange
|
||||
|
||||
return GetRangeBigRes{}, errOutOfRange
|
||||
}
|
||||
|
||||
return GetRangeBigRes{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue