[#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. // GetBigPrm groups the parameters of GetBig operation.
type GetBigPrm struct { type GetBigPrm struct {
addr *objectSDK.Address address
} }
// GetBigRes groups resulting values of GetBig operation. // GetBigRes groups resulting values of GetBig operation.
type GetBigRes struct { type GetBigRes struct {
obj *object.Object roObject
} }
// ErrObjectNotFound is returns on read operations requested on a missing object. // ErrObjectNotFound is returns on read operations requested on a missing object.
var ErrObjectNotFound = errors.New("object not found") 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. // GetBig reads the object from shallow dir of BLOB storage by address.
// //
// Returns any error encountered that // Returns any error encountered that
@ -68,7 +52,9 @@ func (b *BlobStor) GetBig(prm *GetBigPrm) (*GetBigRes, error) {
} }
return &GetBigRes{ return &GetBigRes{
obj: obj, roObject: roObject{
obj: obj,
},
}, nil }, 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 { if prm.ln < 0 {
// try to read from WriteCache // try to read from WriteCache
// TODO: implement // TODO: implement
res, err := s.blobStor.GetBig(
new(blobstor.GetBigPrm). // form GetBig parameters
WithAddress(prm.addr), getBigPrm := new(blobstor.GetBigPrm)
) getBigPrm.SetAddress(prm.addr)
res, err := s.blobStor.GetBig(getBigPrm)
if err != nil { if err != nil {
if errors.Is(err, blobstor.ErrObjectNotFound) { if errors.Is(err, blobstor.ErrObjectNotFound) {
err = ErrObjectNotFound err = ErrObjectNotFound