forked from TrueCloudLab/frostfs-sdk-go
[#4] neofs: Remove useless neofsClientObject
Also ObjectClient interface and its functions Resolve imports Signed-off-by: Angira Kekteeva <kira@nspcc.ru>
This commit is contained in:
parent
4225a21ea5
commit
9f476e3c16
1 changed files with 3 additions and 141 deletions
|
@ -3,80 +3,24 @@ package neofs
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/container"
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/object"
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/owner"
|
"github.com/nspcc-dev/neofs-api-go/pkg/owner"
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/token"
|
"github.com/nspcc-dev/neofs-api-go/pkg/token"
|
||||||
"github.com/nspcc-dev/neofs-http-gw/connections"
|
"github.com/nspcc-dev/neofs-sdk-go/pkg/pool"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BaseOptions represents basic NeoFS request options.
|
|
||||||
type BaseOptions struct {
|
|
||||||
Client client.Client
|
|
||||||
SessionToken *token.SessionToken
|
|
||||||
BearerToken *token.BearerToken
|
|
||||||
}
|
|
||||||
|
|
||||||
// PutOptions represents NeoFS Put request options.
|
|
||||||
type PutOptions struct {
|
|
||||||
BaseOptions
|
|
||||||
Attributes []*object.Attribute
|
|
||||||
ContainerID *container.ID
|
|
||||||
OwnerID *owner.ID
|
|
||||||
Reader io.Reader
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetOptions represents NeoFS Get request options.
|
|
||||||
type GetOptions struct {
|
|
||||||
BaseOptions
|
|
||||||
ObjectAddress *object.Address
|
|
||||||
Writer io.Writer
|
|
||||||
}
|
|
||||||
|
|
||||||
// SearchOptions represents NeoFS Search request options.
|
|
||||||
type SearchOptions struct {
|
|
||||||
BaseOptions
|
|
||||||
ContainerID *container.ID
|
|
||||||
Attribute struct {
|
|
||||||
Key string
|
|
||||||
Value string
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteOptions represents NeoFS Delete request options.
|
|
||||||
type DeleteOptions struct {
|
|
||||||
BaseOptions
|
|
||||||
ObjectAddress *object.Address
|
|
||||||
}
|
|
||||||
|
|
||||||
// ObjectClient wraps basic NeoFS requests.
|
|
||||||
type ObjectClient interface {
|
|
||||||
Put(context.Context, *PutOptions) (*object.Address, error)
|
|
||||||
Get(context.Context, *GetOptions) (*object.Object, error)
|
|
||||||
Search(context.Context, *SearchOptions) ([]*object.ID, error)
|
|
||||||
Delete(context.Context, *DeleteOptions) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClientPlant provides connections to NeoFS nodes from pool and allows to
|
// ClientPlant provides connections to NeoFS nodes from pool and allows to
|
||||||
// get local owner ID.
|
// get local owner ID.
|
||||||
type ClientPlant interface {
|
type ClientPlant interface {
|
||||||
ConnectionArtifacts() (client.Client, *token.SessionToken, error)
|
ConnectionArtifacts() (client.Client, *token.SessionToken, error)
|
||||||
Object() ObjectClient
|
|
||||||
OwnerID() *owner.ID
|
OwnerID() *owner.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
type neofsObjectClient struct {
|
|
||||||
key *ecdsa.PrivateKey
|
|
||||||
pool connections.Pool
|
|
||||||
}
|
|
||||||
|
|
||||||
type neofsClientPlant struct {
|
type neofsClientPlant struct {
|
||||||
key *ecdsa.PrivateKey
|
key *ecdsa.PrivateKey
|
||||||
ownerID *owner.ID
|
ownerID *owner.ID
|
||||||
pool connections.Pool
|
pool pool.Pool
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConnectionArtifacts returns connection from pool.
|
// ConnectionArtifacts returns connection from pool.
|
||||||
|
@ -84,94 +28,12 @@ func (cp *neofsClientPlant) ConnectionArtifacts() (client.Client, *token.Session
|
||||||
return cp.pool.ConnectionArtifacts()
|
return cp.pool.ConnectionArtifacts()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Object returns ObjectClient instance from plant.
|
|
||||||
func (cp *neofsClientPlant) Object() ObjectClient {
|
|
||||||
return &neofsObjectClient{
|
|
||||||
key: cp.key,
|
|
||||||
pool: cp.pool,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// OwnerID returns plant's owner ID.
|
// OwnerID returns plant's owner ID.
|
||||||
func (cp *neofsClientPlant) OwnerID() *owner.ID {
|
func (cp *neofsClientPlant) OwnerID() *owner.ID {
|
||||||
return cp.ownerID
|
return cp.ownerID
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClientPlant creates new ClientPlant from given context, pool and credentials.
|
// NewClientPlant creates new ClientPlant from given context, pool and credentials.
|
||||||
func NewClientPlant(ctx context.Context, pool connections.Pool, creds Credentials) (ClientPlant, error) {
|
func NewClientPlant(ctx context.Context, pool pool.Pool, creds Credentials) (ClientPlant, error) {
|
||||||
return &neofsClientPlant{key: creds.PrivateKey(), ownerID: creds.Owner(), pool: pool}, nil
|
return &neofsClientPlant{key: creds.PrivateKey(), ownerID: creds.Owner(), pool: pool}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put does NeoFS Put request, returning new object address if successful.
|
|
||||||
func (oc *neofsObjectClient) Put(ctx context.Context, options *PutOptions) (*object.Address, error) {
|
|
||||||
var (
|
|
||||||
err error
|
|
||||||
objectID *object.ID
|
|
||||||
)
|
|
||||||
address := object.NewAddress()
|
|
||||||
rawObject := object.NewRaw()
|
|
||||||
rawObject.SetContainerID(options.ContainerID)
|
|
||||||
rawObject.SetOwnerID(options.OwnerID)
|
|
||||||
rawObject.SetAttributes(options.Attributes...)
|
|
||||||
ops := new(client.PutObjectParams).
|
|
||||||
WithObject(rawObject.Object()).
|
|
||||||
WithPayloadReader(options.Reader)
|
|
||||||
objectID, err = options.Client.PutObject(
|
|
||||||
ctx,
|
|
||||||
ops,
|
|
||||||
client.WithSession(options.SessionToken),
|
|
||||||
client.WithBearer(options.BearerToken),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
address.SetObjectID(objectID)
|
|
||||||
address.SetContainerID(options.ContainerID)
|
|
||||||
return address, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get does NeoFS Get request, returning an object received if successful.
|
|
||||||
func (oc *neofsObjectClient) Get(ctx context.Context, options *GetOptions) (*object.Object, error) {
|
|
||||||
var (
|
|
||||||
err error
|
|
||||||
obj *object.Object
|
|
||||||
)
|
|
||||||
ops := new(client.GetObjectParams).
|
|
||||||
WithAddress(options.ObjectAddress).
|
|
||||||
WithPayloadWriter(options.Writer)
|
|
||||||
obj, err = options.Client.GetObject(
|
|
||||||
ctx,
|
|
||||||
ops,
|
|
||||||
client.WithSession(options.SessionToken),
|
|
||||||
client.WithBearer(options.BearerToken),
|
|
||||||
)
|
|
||||||
return obj, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Search does NeoFS Search request, returning object IDs if successful.
|
|
||||||
func (oc *neofsObjectClient) Search(ctx context.Context, options *SearchOptions) ([]*object.ID, error) {
|
|
||||||
sfs := object.NewSearchFilters()
|
|
||||||
sfs.AddRootFilter()
|
|
||||||
sfs.AddFilter(options.Attribute.Key, options.Attribute.Value, object.MatchStringEqual)
|
|
||||||
sops := new(client.SearchObjectParams)
|
|
||||||
sops.WithContainerID(options.ContainerID)
|
|
||||||
sops.WithSearchFilters(sfs)
|
|
||||||
return options.Client.SearchObject(
|
|
||||||
ctx,
|
|
||||||
sops,
|
|
||||||
client.WithSession(options.SessionToken),
|
|
||||||
client.WithBearer(options.BearerToken),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete deletes NeoFS object.
|
|
||||||
func (oc *neofsObjectClient) Delete(ctx context.Context, options *DeleteOptions) error {
|
|
||||||
ops := new(client.DeleteObjectParams).WithAddress(options.ObjectAddress)
|
|
||||||
err := options.Client.DeleteObject(
|
|
||||||
ctx,
|
|
||||||
ops,
|
|
||||||
client.WithSession(options.SessionToken),
|
|
||||||
client.WithBearer(options.BearerToken),
|
|
||||||
)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue