Skip to content

Commit

Permalink
client: Return header directly instead of wrapper struct
Browse files Browse the repository at this point in the history
Signed-off-by: Evgenii Baidakov <evgenii@nspcc.io>
  • Loading branch information
smallhive committed Aug 23, 2023
1 parent 9be9f27 commit 25d5593
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 66 deletions.
9 changes: 1 addition & 8 deletions audit/collect.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@ package audit

import (
"context"
"errors"
"fmt"

"github.com/nspcc-dev/neofs-sdk-go/checksum"
"github.com/nspcc-dev/neofs-sdk-go/client"
cid "github.com/nspcc-dev/neofs-sdk-go/container/id"
"github.com/nspcc-dev/neofs-sdk-go/object"
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
"github.com/nspcc-dev/neofs-sdk-go/object/relations"
"github.com/nspcc-dev/neofs-sdk-go/storagegroup"
Expand Down Expand Up @@ -48,16 +46,11 @@ func CollectMembers(
var prmHead client.PrmObjectHead
for _, phyMember := range phyMembers {
addr.SetObject(phyMember)
leaf, err := collector.ObjectHead(ctx, addr.Container(), addr.Object(), signer, prmHead)
hdr, err := collector.ObjectHead(ctx, addr.Container(), addr.Object(), signer, prmHead)
if err != nil {
return nil, fmt.Errorf("head phy member '%s': %w", phyMember.EncodeToString(), err)
}

var hdr object.Object
if !leaf.ReadHeader(&hdr) {
return nil, errors.New("header err")
}

sumPhySize += hdr.PayloadSize()
cs, _ := hdr.PayloadHomomorphicHash()

Expand Down
48 changes: 13 additions & 35 deletions client/object_get.go
Original file line number Diff line number Diff line change
Expand Up @@ -338,34 +338,6 @@ type PrmObjectHead struct {
prmObjectRead
}

// ResObjectHead groups resulting values of ObjectHead operation.
type ResObjectHead struct {
// requested object (response doesn't carry the ID)
idObj oid.ID

hdr *v2object.HeaderWithSignature
}

// ReadHeader reads header of the requested object.
// Returns false if header is missing in the response (not read).
func (x *ResObjectHead) ReadHeader(dst *object.Object) bool {
if x.hdr == nil {
return false
}

var objv2 v2object.Object

objv2.SetHeader(x.hdr.GetHeader())
objv2.SetSignature(x.hdr.GetSignature())

obj := object.NewFromV2(&objv2)
obj.SetID(x.idObj)

*dst = *obj

return true
}

// ObjectHead reads object header through a remote server using NeoFS API protocol.
//
// Exactly one return value is non-nil. By default, server status is returned in res structure.
Expand All @@ -386,7 +358,7 @@ func (x *ResObjectHead) ReadHeader(dst *object.Object) bool {
// - [apistatus.ErrObjectAccessDenied]
// - [apistatus.ErrObjectAlreadyRemoved]
// - [apistatus.ErrSessionTokenExpired]
func (c *Client) ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm PrmObjectHead) (*ResObjectHead, error) {
func (c *Client) ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm PrmObjectHead) (*object.Object, error) {
var (
addr v2refs.Address
cidV2 v2refs.ContainerID
Expand Down Expand Up @@ -429,13 +401,10 @@ func (c *Client) ObjectHead(ctx context.Context, containerID cid.ID, objectID oi
return nil, err
}

var res ResObjectHead
if err = c.processResponse(resp); err != nil {
return nil, err
}

_ = res.idObj.ReadFromV2(*addr.GetObjectID())

switch v := resp.GetBody().GetHeaderPart().(type) {
default:
err = fmt.Errorf("unexpected header type %T", v)
Expand All @@ -444,10 +413,19 @@ func (c *Client) ObjectHead(ctx context.Context, containerID cid.ID, objectID oi
err = object.NewSplitInfoError(object.NewSplitInfoFromV2(v))
return nil, err
case *v2object.HeaderWithSignature:
res.hdr = v
}
if v == nil {
return nil, errors.New("empty header")
}

var objv2 v2object.Object
objv2.SetHeader(v.GetHeader())
objv2.SetSignature(v.GetSignature())

return &res, nil
obj := object.NewFromV2(&objv2)
obj.SetID(objectID)

return obj, nil
}
}

// PrmObjectRange groups optional parameters of ObjectRange operation.
Expand Down
23 changes: 4 additions & 19 deletions object/relations/relations.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ var (

// HeadExecutor describes methods to get object head.
type HeadExecutor interface {
ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm client.PrmObjectHead) (*client.ResObjectHead, error)
ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm client.PrmObjectHead) (*object.Object, error)
}

// SearchExecutor describes methods to search objects.
Expand Down Expand Up @@ -131,7 +131,7 @@ func getSplitInfo(ctx context.Context, header HeadExecutor, cnrID cid.ID, objID
prmHead.WithinSession(*tokens.Session)
}
prmHead.MarkRaw()
res, err := header.ObjectHead(ctx, cnrID, objID, signer, prmHead)
hdr, err := header.ObjectHead(ctx, cnrID, objID, signer, prmHead)

if err != nil {
var errSplit *object.SplitInfoError
Expand All @@ -142,11 +142,6 @@ func getSplitInfo(ctx context.Context, header HeadExecutor, cnrID cid.ID, objID
return nil, fmt.Errorf("raw object header: %w", err)
}

var hdr object.Object
if !res.ReadHeader(&hdr) {
return nil, errors.New("header")
}

if hdr.SplitID() == nil {
return nil, ErrNoSplitInfo
}
Expand Down Expand Up @@ -206,16 +201,11 @@ func listChildrenByLinker(ctx context.Context, header HeadExecutor, cnrID cid.ID
prm.WithinSession(*tokens.Session)
}

res, err := header.ObjectHead(ctx, cnrID, objID, signer, prm)
hdr, err := header.ObjectHead(ctx, cnrID, objID, signer, prm)
if err != nil {
return nil, fmt.Errorf("linking object's header: %w", err)
}

var hdr object.Object
if !res.ReadHeader(&hdr) {
return nil, errors.New("header")
}

return hdr.Children(), nil
}

Expand All @@ -228,16 +218,11 @@ func getLeftSibling(ctx context.Context, header HeadExecutor, cnrID cid.ID, objI
prm.WithinSession(*tokens.Session)
}

res, err := header.ObjectHead(ctx, cnrID, objID, signer, prm)
hdr, err := header.ObjectHead(ctx, cnrID, objID, signer, prm)
if err != nil {
return oid.ID{}, fmt.Errorf("split chain member's header: %w", err)
}

var hdr object.Object
if !res.ReadHeader(&hdr) {
return oid.ID{}, errors.New("header")
}

idMember, ok := hdr.PreviousID()
if !ok {
return oid.ID{}, ErrNoLeftSibling
Expand Down
2 changes: 1 addition & 1 deletion pool/mock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ func (m *mockClient) ObjectGetInit(_ context.Context, _ cid.ID, _ oid.ID, _ user
return hdr, &pl, m.errOnGetObject
}

func (m *mockClient) ObjectHead(_ context.Context, _ cid.ID, _ oid.ID, _ user.Signer, _ client.PrmObjectHead) (*client.ResObjectHead, error) {
func (m *mockClient) ObjectHead(_ context.Context, _ cid.ID, _ oid.ID, _ user.Signer, _ client.PrmObjectHead) (*object.Object, error) {
// TODO implement me
panic("implement me")
}
Expand Down
2 changes: 1 addition & 1 deletion pool/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func (p *Pool) ObjectGetInit(ctx context.Context, containerID cid.ID, objectID o
// Operation is executed within a session automatically created by [Pool] unless parameters explicitly override session settings.
//
// See details in [client.Client.ObjectHead].
func (p *Pool) ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm client.PrmObjectHead) (*client.ResObjectHead, error) {
func (p *Pool) ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm client.PrmObjectHead) (*object.Object, error) {
c, err := p.sdkClient()
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion pool/pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ type sdkClientInterface interface {

ObjectPutInit(ctx context.Context, hdr object.Object, signer user.Signer, prm sdkClient.PrmObjectPutInit) (sdkClient.ObjectWriter, error)
ObjectGetInit(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm sdkClient.PrmObjectGet) (object.Object, *sdkClient.PayloadReader, error)
ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm sdkClient.PrmObjectHead) (*sdkClient.ResObjectHead, error)
ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm sdkClient.PrmObjectHead) (*object.Object, error)
ObjectRangeInit(ctx context.Context, containerID cid.ID, objectID oid.ID, offset, length uint64, signer user.Signer, prm sdkClient.PrmObjectRange) (*sdkClient.ObjectRangeReader, error)
ObjectDelete(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm sdkClient.PrmObjectDelete) (oid.ID, error)
ObjectHash(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm sdkClient.PrmObjectHash) ([][]byte, error)
Expand Down
2 changes: 1 addition & 1 deletion pool/pool_aio_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ type (
}

objectHeadGetter interface {
ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm client.PrmObjectHead) (*client.ResObjectHead, error)
ObjectHead(ctx context.Context, containerID cid.ID, objectID oid.ID, signer user.Signer, prm client.PrmObjectHead) (*object.Object, error)
}
)

Expand Down

0 comments on commit 25d5593

Please sign in to comment.