forked from TrueCloudLab/frostfs-node
[#52] object/range: Attach received object header to result
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
0490107165
commit
abf9ad3573
3 changed files with 30 additions and 9 deletions
|
@ -1,5 +1,15 @@
|
||||||
package rangesvc
|
package rangesvc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/nspcc-dev/neofs-node/pkg/core/object"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Result struct {
|
||||||
|
head *object.Object
|
||||||
|
|
||||||
|
stream Streamer
|
||||||
|
}
|
||||||
|
|
||||||
type Response struct {
|
type Response struct {
|
||||||
chunk []byte
|
chunk []byte
|
||||||
}
|
}
|
||||||
|
@ -7,3 +17,11 @@ type Response struct {
|
||||||
func (r *Response) PayloadChunk() []byte {
|
func (r *Response) PayloadChunk() []byte {
|
||||||
return r.chunk
|
return r.chunk
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *Result) Head() *object.Object {
|
||||||
|
return r.head
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Result) Stream() Streamer {
|
||||||
|
return r.stream
|
||||||
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ func NewService(opts ...Option) *Service {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Service) GetRange(ctx context.Context, prm *Prm) (Streamer, error) {
|
func (s *Service) GetRange(ctx context.Context, prm *Prm) (*Result, error) {
|
||||||
headResult, err := s.headSvc.Head(ctx, new(headsvc.Prm).
|
headResult, err := s.headSvc.Head(ctx, new(headsvc.Prm).
|
||||||
WithAddress(prm.addr).
|
WithAddress(prm.addr).
|
||||||
OnlyLocal(prm.local),
|
OnlyLocal(prm.local),
|
||||||
|
@ -83,12 +83,15 @@ func (s *Service) GetRange(ctx context.Context, prm *Prm) (Streamer, error) {
|
||||||
return nil, errors.Wrapf(err, "(%T) could not fill range traverser", s)
|
return nil, errors.Wrapf(err, "(%T) could not fill range traverser", s)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &streamer{
|
return &Result{
|
||||||
cfg: s.cfg,
|
head: origin,
|
||||||
once: new(sync.Once),
|
stream: &streamer{
|
||||||
ctx: ctx,
|
cfg: s.cfg,
|
||||||
prm: prm,
|
once: new(sync.Once),
|
||||||
rangeTraverser: rngTraverser,
|
ctx: ctx,
|
||||||
|
prm: prm,
|
||||||
|
rangeTraverser: rngTraverser,
|
||||||
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,12 +35,12 @@ func NewService(opts ...Option) *Service {
|
||||||
|
|
||||||
// GetRange calls internal service and returns v2 object payload range stream.
|
// GetRange calls internal service and returns v2 object payload range stream.
|
||||||
func (s *Service) GetRange(ctx context.Context, req *objectV2.GetRangeRequest) (objectV2.GetRangeObjectStreamer, error) {
|
func (s *Service) GetRange(ctx context.Context, req *objectV2.GetRangeRequest) (objectV2.GetRangeObjectStreamer, error) {
|
||||||
stream, err := s.svc.GetRange(ctx, toPrm(req))
|
r, err := s.svc.GetRange(ctx, toPrm(req))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "(%T) could not get object payload range data", s)
|
return nil, errors.Wrapf(err, "(%T) could not get object payload range data", s)
|
||||||
}
|
}
|
||||||
|
|
||||||
return fromResponse(stream), nil
|
return fromResponse(r.Stream()), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func WithInternalService(v *rangesvc.Service) Option {
|
func WithInternalService(v *rangesvc.Service) Option {
|
||||||
|
|
Loading…
Reference in a new issue