forked from TrueCloudLab/frostfs-sdk-go
Merge pull request #13 from KirillovDenis/feature/12-impl_client_object
[#12] Implemented client.Object in Pool
This commit is contained in:
commit
86a9aa9259
1 changed files with 76 additions and 0 deletions
|
@ -10,6 +10,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"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/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/session"
|
"github.com/nspcc-dev/neofs-api-go/pkg/session"
|
||||||
)
|
)
|
||||||
|
@ -59,6 +60,7 @@ func (pb *Builder) Build(ctx context.Context, options *BuilderOptions) (Pool, er
|
||||||
|
|
||||||
// Pool is an interface providing connection artifacts on request.
|
// Pool is an interface providing connection artifacts on request.
|
||||||
type Pool interface {
|
type Pool interface {
|
||||||
|
client.Object
|
||||||
Connection() (client.Client, *session.Token, error)
|
Connection() (client.Client, *session.Token, error)
|
||||||
OwnerID() *owner.ID
|
OwnerID() *owner.ID
|
||||||
}
|
}
|
||||||
|
@ -69,6 +71,8 @@ type clientPack struct {
|
||||||
healthy bool
|
healthy bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _ Pool = (*pool)(nil)
|
||||||
|
|
||||||
type pool struct {
|
type pool struct {
|
||||||
lock sync.RWMutex
|
lock sync.RWMutex
|
||||||
sampler *Sampler
|
sampler *Sampler
|
||||||
|
@ -149,3 +153,75 @@ func (p *pool) Connection() (client.Client, *session.Token, error) {
|
||||||
func (p *pool) OwnerID() *owner.ID {
|
func (p *pool) OwnerID() *owner.ID {
|
||||||
return p.owner
|
return p.owner
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *pool) conn(option []client.CallOption) (client.Client, []client.CallOption, error) {
|
||||||
|
conn, token, err := p.Connection()
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
return conn, append(option, client.WithSession(token)), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pool) PutObject(ctx context.Context, params *client.PutObjectParams, option ...client.CallOption) (*object.ID, error) {
|
||||||
|
conn, options, err := p.conn(option)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn.PutObject(ctx, params, options...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pool) DeleteObject(ctx context.Context, params *client.DeleteObjectParams, option ...client.CallOption) error {
|
||||||
|
conn, options, err := p.conn(option)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return conn.DeleteObject(ctx, params, options...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pool) GetObject(ctx context.Context, params *client.GetObjectParams, option ...client.CallOption) (*object.Object, error) {
|
||||||
|
conn, options, err := p.conn(option)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn.GetObject(ctx, params, options...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pool) GetObjectHeader(ctx context.Context, params *client.ObjectHeaderParams, option ...client.CallOption) (*object.Object, error) {
|
||||||
|
conn, options, err := p.conn(option)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn.GetObjectHeader(ctx, params, options...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pool) ObjectPayloadRangeData(ctx context.Context, params *client.RangeDataParams, option ...client.CallOption) ([]byte, error) {
|
||||||
|
conn, options, err := p.conn(option)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn.ObjectPayloadRangeData(ctx, params, options...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pool) ObjectPayloadRangeSHA256(ctx context.Context, params *client.RangeChecksumParams, option ...client.CallOption) ([][32]byte, error) {
|
||||||
|
conn, options, err := p.conn(option)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn.ObjectPayloadRangeSHA256(ctx, params, options...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pool) ObjectPayloadRangeTZ(ctx context.Context, params *client.RangeChecksumParams, option ...client.CallOption) ([][64]byte, error) {
|
||||||
|
conn, options, err := p.conn(option)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn.ObjectPayloadRangeTZ(ctx, params, options...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pool) SearchObject(ctx context.Context, params *client.SearchObjectParams, option ...client.CallOption) ([]*object.ID, error) {
|
||||||
|
conn, options, err := p.conn(option)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn.SearchObject(ctx, params, options...)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue