forked from TrueCloudLab/frostfs-node
[#211] blobstor: Refactor GetBig parameters and result
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
fb6857a1cb
commit
6813f40665
3 changed files with 44 additions and 23 deletions
|
@ -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
|
||||
}
|
||||
|
||||
|
|
33
pkg/local_object_storage/blobstor/util.go
Normal file
33
pkg/local_object_storage/blobstor/util.go
Normal 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
|
||||
}
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue