Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Return header directly instead of wrapper struct #497

Merged
merged 1 commit into from
Aug 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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