[#211] blobstor: Refactor GetBig parameters and result

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2020-11-24 16:40:50 +03:00 committed by Alex Vanin
parent fb6857a1cb
commit 6813f40665
3 changed files with 44 additions and 23 deletions

View file

@ -11,33 +11,17 @@ import (
// GetBigPrm groups the parameters of GetBig operation.
type GetBigPrm struct {
addr *objectSDK.Address
address
}
// GetBigRes groups resulting values of GetBig operation.
type GetBigRes struct {
obj *object.Object
roObject
}
// ErrObjectNotFound is returns on read operations requested on a missing object.
var ErrObjectNotFound = errors.New("object not found")
// WithAddress is a GetBig option to set the address of the requested object.
//
// Option is required.
func (p *GetBigPrm) WithAddress(addr *objectSDK.Address) *GetBigPrm {
if p != nil {
p.addr = addr
}
return p
}
// Object returns the requested object.
func (r *GetBigRes) Object() *object.Object {
return r.obj
}
// GetBig reads the object from shallow dir of BLOB storage by address.
//
// Returns any error encountered that
@ -68,7 +52,9 @@ func (b *BlobStor) GetBig(prm *GetBigPrm) (*GetBigRes, error) {
}
return &GetBigRes{
obj: obj,
roObject: roObject{
obj: obj,
},
}, nil
}

View file

@ -0,0 +1,33 @@
package blobstor
import (
objectSDK "github.com/nspcc-dev/neofs-api-go/pkg/object"
"github.com/nspcc-dev/neofs-node/pkg/core/object"
)
type address struct {
addr *objectSDK.Address
}
// SetAddress sets the address of the requested object.
func (a *address) SetAddress(addr *objectSDK.Address) {
a.addr = addr
}
type roObject struct {
obj *object.Object
}
// Object returns the object.
func (o roObject) Object() *object.Object {
return o.obj
}
type rwObject struct {
roObject
}
// SetObject sets the object.
func (o *rwObject) SetObject(obj *object.Object) {
o.obj = obj
}

View file

@ -77,10 +77,12 @@ func (s *Shard) Get(prm *GetPrm) (*GetRes, error) {
if prm.ln < 0 {
// try to read from WriteCache
// TODO: implement
res, err := s.blobStor.GetBig(
new(blobstor.GetBigPrm).
WithAddress(prm.addr),
)
// form GetBig parameters
getBigPrm := new(blobstor.GetBigPrm)
getBigPrm.SetAddress(prm.addr)
res, err := s.blobStor.GetBig(getBigPrm)
if err != nil {
if errors.Is(err, blobstor.ErrObjectNotFound) {
err = ErrObjectNotFound