forked from TrueCloudLab/frostfs-node
[#422] pkg/services: Cache clients by address only
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
55dec28bbb
commit
cc7287d6f7
19 changed files with 53 additions and 46 deletions
|
@ -217,24 +217,27 @@ func (r *remoteLoadAnnounceProvider) InitRemote(srv loadroute.ServerInfo) (loadc
|
||||||
return nil, errors.Wrap(err, "could not convert address to IP format")
|
return nil, errors.Wrap(err, "could not convert address to IP format")
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := r.clientCache.Get(r.key, ipAddr)
|
c, err := r.clientCache.Get(ipAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "could not initialize API client")
|
return nil, errors.Wrap(err, "could not initialize API client")
|
||||||
}
|
}
|
||||||
|
|
||||||
return &remoteLoadAnnounceWriterProvider{
|
return &remoteLoadAnnounceWriterProvider{
|
||||||
client: c,
|
client: c,
|
||||||
|
key: r.key,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type remoteLoadAnnounceWriterProvider struct {
|
type remoteLoadAnnounceWriterProvider struct {
|
||||||
client *apiClient.Client
|
client *apiClient.Client
|
||||||
|
key *ecdsa.PrivateKey
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *remoteLoadAnnounceWriterProvider) InitWriter(ctx context.Context) (loadcontroller.Writer, error) {
|
func (p *remoteLoadAnnounceWriterProvider) InitWriter(ctx context.Context) (loadcontroller.Writer, error) {
|
||||||
return &remoteLoadAnnounceWriter{
|
return &remoteLoadAnnounceWriter{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
client: p.client,
|
client: p.client,
|
||||||
|
key: p.key,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,6 +245,7 @@ type remoteLoadAnnounceWriter struct {
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
|
|
||||||
client *apiClient.Client
|
client *apiClient.Client
|
||||||
|
key *ecdsa.PrivateKey
|
||||||
|
|
||||||
buf []containerSDK.UsedSpaceAnnouncement
|
buf []containerSDK.UsedSpaceAnnouncement
|
||||||
}
|
}
|
||||||
|
@ -253,7 +257,7 @@ func (r *remoteLoadAnnounceWriter) Put(a containerSDK.UsedSpaceAnnouncement) err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *remoteLoadAnnounceWriter) Close() error {
|
func (r *remoteLoadAnnounceWriter) Close() error {
|
||||||
return r.client.AnnounceContainerUsedSpace(r.ctx, r.buf)
|
return r.client.AnnounceContainerUsedSpace(r.ctx, r.buf, apiClient.WithKey(r.key))
|
||||||
}
|
}
|
||||||
|
|
||||||
type loadPlacementBuilder struct {
|
type loadPlacementBuilder struct {
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -16,7 +16,7 @@ require (
|
||||||
github.com/multiformats/go-multihash v0.0.13 // indirect
|
github.com/multiformats/go-multihash v0.0.13 // indirect
|
||||||
github.com/nspcc-dev/hrw v1.0.9
|
github.com/nspcc-dev/hrw v1.0.9
|
||||||
github.com/nspcc-dev/neo-go v0.94.0-pre.0.20210301112733-3227de8050f8
|
github.com/nspcc-dev/neo-go v0.94.0-pre.0.20210301112733-3227de8050f8
|
||||||
github.com/nspcc-dev/neofs-api-go v1.24.0
|
github.com/nspcc-dev/neofs-api-go v1.24.1-0.20210312074010-64505180b400
|
||||||
github.com/nspcc-dev/neofs-crypto v0.3.0
|
github.com/nspcc-dev/neofs-crypto v0.3.0
|
||||||
github.com/nspcc-dev/tzhash v1.4.0
|
github.com/nspcc-dev/tzhash v1.4.0
|
||||||
github.com/panjf2000/ants/v2 v2.3.0
|
github.com/panjf2000/ants/v2 v2.3.0
|
||||||
|
|
BIN
go.sum
BIN
go.sum
Binary file not shown.
|
@ -362,6 +362,7 @@ func New(ctx context.Context, log *zap.Logger, cfg *viper.Viper) (*Server, error
|
||||||
MorphClient: server.morphClient,
|
MorphClient: server.morphClient,
|
||||||
IRList: server,
|
IRList: server,
|
||||||
ClientCache: clientCache,
|
ClientCache: clientCache,
|
||||||
|
Key: server.key,
|
||||||
RPCSearchTimeout: cfg.GetDuration("audit.timeout.search"),
|
RPCSearchTimeout: cfg.GetDuration("audit.timeout.search"),
|
||||||
TaskManager: auditTaskManager,
|
TaskManager: auditTaskManager,
|
||||||
Reporter: server,
|
Reporter: server,
|
||||||
|
|
|
@ -136,7 +136,7 @@ func (ap *Processor) findStorageGroups(cid *container.ID, shuffled netmap.Nodes)
|
||||||
sgSearchParams.WithSearchFilters(sgFilter)
|
sgSearchParams.WithSearchFilters(sgFilter)
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), ap.searchTimeout)
|
ctx, cancel := context.WithTimeout(context.Background(), ap.searchTimeout)
|
||||||
result, err := cli.SearchObject(ctx, sgSearchParams)
|
result, err := cli.SearchObject(ctx, sgSearchParams, client.WithKey(ap.key))
|
||||||
cancel()
|
cancel()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package audit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/ecdsa"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
|
@ -46,6 +47,7 @@ type (
|
||||||
morphClient *client.Client
|
morphClient *client.Client
|
||||||
irList Indexer
|
irList Indexer
|
||||||
clientCache NeoFSClientCache
|
clientCache NeoFSClientCache
|
||||||
|
key *ecdsa.PrivateKey
|
||||||
searchTimeout time.Duration
|
searchTimeout time.Duration
|
||||||
|
|
||||||
containerClient *wrapContainer.Wrapper
|
containerClient *wrapContainer.Wrapper
|
||||||
|
@ -68,6 +70,7 @@ type (
|
||||||
RPCSearchTimeout time.Duration
|
RPCSearchTimeout time.Duration
|
||||||
TaskManager TaskManager
|
TaskManager TaskManager
|
||||||
Reporter audit.Reporter
|
Reporter audit.Reporter
|
||||||
|
Key *ecdsa.PrivateKey
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -97,6 +100,8 @@ func New(p *Params) (*Processor, error) {
|
||||||
return nil, errors.New("ir/audit: audit task manager is not set")
|
return nil, errors.New("ir/audit: audit task manager is not set")
|
||||||
case p.Reporter == nil:
|
case p.Reporter == nil:
|
||||||
return nil, errors.New("ir/audit: audit result reporter is not set")
|
return nil, errors.New("ir/audit: audit result reporter is not set")
|
||||||
|
case p.Key == nil:
|
||||||
|
return nil, errors.New("ir/audit: signing key is not set")
|
||||||
}
|
}
|
||||||
|
|
||||||
pool, err := ants.NewPool(ProcessorPoolSize, ants.WithNonblocking(true))
|
pool, err := ants.NewPool(ProcessorPoolSize, ants.WithNonblocking(true))
|
||||||
|
@ -124,6 +129,7 @@ func New(p *Params) (*Processor, error) {
|
||||||
morphClient: p.MorphClient,
|
morphClient: p.MorphClient,
|
||||||
irList: p.IRList,
|
irList: p.IRList,
|
||||||
clientCache: p.ClientCache,
|
clientCache: p.ClientCache,
|
||||||
|
key: p.Key,
|
||||||
searchTimeout: p.RPCSearchTimeout,
|
searchTimeout: p.RPCSearchTimeout,
|
||||||
containerClient: containerClient,
|
containerClient: containerClient,
|
||||||
netmapClient: netmapClient,
|
netmapClient: netmapClient,
|
||||||
|
|
|
@ -47,7 +47,9 @@ func newClientCache(p *clientCacheParams) *ClientCache {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ClientCache) Get(address string, opts ...client.Option) (*client.Client, error) {
|
func (c *ClientCache) Get(address string, opts ...client.Option) (*client.Client, error) {
|
||||||
return c.cache.Get(c.key, address, opts...)
|
// Because cache is used by `ClientCache` exclusively,
|
||||||
|
// client will always have valid key.
|
||||||
|
return c.cache.Get(address, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSG polls the container from audit task to get the object by id.
|
// GetSG polls the container from audit task to get the object by id.
|
||||||
|
@ -89,7 +91,7 @@ func (c *ClientCache) getSG(ctx context.Context, addr *object.Address, nm *netma
|
||||||
}
|
}
|
||||||
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, c.sgTimeout)
|
cctx, cancel := context.WithTimeout(ctx, c.sgTimeout)
|
||||||
obj, err := cli.GetObject(cctx, getParams)
|
obj, err := cli.GetObject(cctx, getParams, client.WithKey(c.key))
|
||||||
|
|
||||||
cancel()
|
cancel()
|
||||||
|
|
||||||
|
@ -143,7 +145,9 @@ func (c *ClientCache) GetHeader(task *audit.Task, node *netmap.Node, id *object.
|
||||||
}
|
}
|
||||||
|
|
||||||
cctx, cancel := context.WithTimeout(task.AuditContext(), c.headTimeout)
|
cctx, cancel := context.WithTimeout(task.AuditContext(), c.headTimeout)
|
||||||
head, err := cli.GetObjectHeader(cctx, headParams, client.WithTTL(ttl))
|
head, err := cli.GetObjectHeader(cctx, headParams,
|
||||||
|
client.WithTTL(ttl),
|
||||||
|
client.WithKey(c.key))
|
||||||
|
|
||||||
cancel()
|
cancel()
|
||||||
|
|
||||||
|
@ -177,7 +181,9 @@ func (c *ClientCache) GetRangeHash(task *audit.Task, node *netmap.Node, id *obje
|
||||||
}
|
}
|
||||||
|
|
||||||
cctx, cancel := context.WithTimeout(task.AuditContext(), c.rangeTimeout)
|
cctx, cancel := context.WithTimeout(task.AuditContext(), c.rangeTimeout)
|
||||||
result, err := cli.ObjectPayloadRangeTZ(cctx, rangeParams, client.WithTTL(1))
|
result, err := cli.ObjectPayloadRangeTZ(cctx, rangeParams,
|
||||||
|
client.WithTTL(1),
|
||||||
|
client.WithKey(c.key))
|
||||||
|
|
||||||
cancel()
|
cancel()
|
||||||
|
|
||||||
|
|
22
pkg/network/cache/client.go
vendored
22
pkg/network/cache/client.go
vendored
|
@ -1,13 +1,9 @@
|
||||||
package cache
|
package cache
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ecdsa"
|
|
||||||
"crypto/sha256"
|
|
||||||
"encoding/hex"
|
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
||||||
crypto "github.com/nspcc-dev/neofs-crypto"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
@ -28,11 +24,9 @@ func NewSDKClientCache() *ClientCache {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get function returns existing client or creates a new one.
|
// Get function returns existing client or creates a new one.
|
||||||
func (c *ClientCache) Get(key *ecdsa.PrivateKey, address string, opts ...client.Option) (*client.Client, error) {
|
func (c *ClientCache) Get(address string, opts ...client.Option) (*client.Client, error) {
|
||||||
id := uniqueID(key, address)
|
|
||||||
|
|
||||||
c.mu.RLock()
|
c.mu.RLock()
|
||||||
if cli, ok := c.clients[id]; ok {
|
if cli, ok := c.clients[address]; ok {
|
||||||
// todo: check underlying connection neofs-api-go#196
|
// todo: check underlying connection neofs-api-go#196
|
||||||
c.mu.RUnlock()
|
c.mu.RUnlock()
|
||||||
|
|
||||||
|
@ -46,22 +40,16 @@ func (c *ClientCache) Get(key *ecdsa.PrivateKey, address string, opts ...client.
|
||||||
|
|
||||||
// check once again if client is missing in cache, concurrent routine could
|
// check once again if client is missing in cache, concurrent routine could
|
||||||
// create client while this routine was locked on `c.mu.Lock()`.
|
// create client while this routine was locked on `c.mu.Lock()`.
|
||||||
if cli, ok := c.clients[id]; ok {
|
if cli, ok := c.clients[address]; ok {
|
||||||
return cli, nil
|
return cli, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
cli, err := client.New(key, append(opts, client.WithAddress(address))...)
|
cli, err := client.New(nil, append(opts, client.WithAddress(address))...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
c.clients[id] = cli
|
c.clients[address] = cli
|
||||||
|
|
||||||
return cli, nil
|
return cli, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func uniqueID(key *ecdsa.PrivateKey, address string) string {
|
|
||||||
keyFingerprint := sha256.Sum256(crypto.MarshalPrivateKey(key))
|
|
||||||
|
|
||||||
return hex.EncodeToString(keyFingerprint[:]) + address
|
|
||||||
}
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ func (exec execCtx) key() *ecdsa.PrivateKey {
|
||||||
func (exec execCtx) callOptions() []client.CallOption {
|
func (exec execCtx) callOptions() []client.CallOption {
|
||||||
return exec.prm.common.RemoteCallOptions(
|
return exec.prm.common.RemoteCallOptions(
|
||||||
util.WithNetmapEpoch(exec.curProcEpoch),
|
util.WithNetmapEpoch(exec.curProcEpoch),
|
||||||
)
|
util.WithKey(exec.key()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (exec execCtx) remotePrm() *client.GetObjectParams {
|
func (exec execCtx) remotePrm() *client.GetObjectParams {
|
||||||
|
@ -276,7 +276,7 @@ func (exec execCtx) remoteClient(node *network.Address) (getClient, bool) {
|
||||||
|
|
||||||
log.Debug("could not calculate node IP address")
|
log.Debug("could not calculate node IP address")
|
||||||
case err == nil:
|
case err == nil:
|
||||||
c, err := exec.svc.clientCache.get(exec.key(), ipAddr)
|
c, err := exec.svc.clientCache.get(ipAddr)
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -2,7 +2,6 @@ package getsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/ecdsa"
|
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -81,7 +80,7 @@ func (p *testPlacementBuilder) BuildPlacement(addr *objectSDK.Address, _ *netmap
|
||||||
return vs, nil
|
return vs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *testClientCache) get(_ *ecdsa.PrivateKey, addr string) (getClient, error) {
|
func (c *testClientCache) get(addr string) (getClient, error) {
|
||||||
v, ok := c.clients[addr]
|
v, ok := c.clients[addr]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("could not construct client")
|
return nil, errors.New("could not construct client")
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package getsvc
|
package getsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ecdsa"
|
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
||||||
objectSDK "github.com/nspcc-dev/neofs-api-go/pkg/object"
|
objectSDK "github.com/nspcc-dev/neofs-api-go/pkg/object"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/core/netmap"
|
"github.com/nspcc-dev/neofs-node/pkg/core/netmap"
|
||||||
|
@ -37,7 +35,7 @@ type cfg struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
clientCache interface {
|
clientCache interface {
|
||||||
get(*ecdsa.PrivateKey, string) (getClient, error)
|
get(string) (getClient, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
traverserGenerator interface {
|
traverserGenerator interface {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package getsvc
|
package getsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ecdsa"
|
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
||||||
|
@ -75,8 +74,8 @@ func (s *SimpleObjectWriter) Object() *object.Object {
|
||||||
return s.obj.Object()
|
return s.obj.Object()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *clientCacheWrapper) get(key *ecdsa.PrivateKey, addr string) (getClient, error) {
|
func (c *clientCacheWrapper) get(addr string) (getClient, error) {
|
||||||
clt, err := c.cache.Get(key, addr, c.opts...)
|
clt, err := c.cache.Get(addr, c.opts...)
|
||||||
|
|
||||||
return &clientWrapper{
|
return &clientWrapper{
|
||||||
client: clt,
|
client: clt,
|
||||||
|
|
|
@ -70,7 +70,7 @@ func (h *RemoteHeader) Head(ctx context.Context, prm *RemoteHeadPrm) (*object.Ob
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := h.clientCache.Get(key, addr, h.clientOpts...)
|
c, err := h.clientCache.Get(addr, h.clientOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "(%T) could not create SDK client %s", h, addr)
|
return nil, errors.Wrapf(err, "(%T) could not create SDK client %s", h, addr)
|
||||||
}
|
}
|
||||||
|
@ -87,6 +87,7 @@ func (h *RemoteHeader) Head(ctx context.Context, prm *RemoteHeadPrm) (*object.Ob
|
||||||
client.WithTTL(1), // FIXME: use constant
|
client.WithTTL(1), // FIXME: use constant
|
||||||
client.WithSession(prm.commonHeadPrm.common.SessionToken()),
|
client.WithSession(prm.commonHeadPrm.common.SessionToken()),
|
||||||
client.WithBearer(prm.commonHeadPrm.common.BearerToken()),
|
client.WithBearer(prm.commonHeadPrm.common.BearerToken()),
|
||||||
|
client.WithKey(key),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "(%T) could not head object in %s", h, addr)
|
return nil, errors.Wrapf(err, "(%T) could not head object in %s", h, addr)
|
||||||
|
|
|
@ -64,7 +64,7 @@ func (t *remoteTarget) Close() (*transformer.AccessIdentifiers, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := t.clientCache.Get(key, addr, t.clientOpts...)
|
c, err := t.clientCache.Get(addr, t.clientOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "(%T) could not create SDK client %s", t, addr)
|
return nil, errors.Wrapf(err, "(%T) could not create SDK client %s", t, addr)
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,7 @@ func (t *remoteTarget) Close() (*transformer.AccessIdentifiers, error) {
|
||||||
append(
|
append(
|
||||||
t.commonPrm.RemoteCallOptions(),
|
t.commonPrm.RemoteCallOptions(),
|
||||||
client.WithTTL(1), // FIXME: use constant
|
client.WithTTL(1), // FIXME: use constant
|
||||||
|
client.WithKey(key),
|
||||||
)...,
|
)...,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -69,6 +69,7 @@ func (exec execCtx) key() *ecdsa.PrivateKey {
|
||||||
func (exec execCtx) callOptions() []client.CallOption {
|
func (exec execCtx) callOptions() []client.CallOption {
|
||||||
return exec.prm.common.RemoteCallOptions(
|
return exec.prm.common.RemoteCallOptions(
|
||||||
util.WithNetmapEpoch(exec.curProcEpoch),
|
util.WithNetmapEpoch(exec.curProcEpoch),
|
||||||
|
util.WithKey(exec.key()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +147,7 @@ func (exec execCtx) remoteClient(node *network.Address) (searchClient, bool) {
|
||||||
|
|
||||||
log.Debug("could not calculate node IP address")
|
log.Debug("could not calculate node IP address")
|
||||||
case err == nil:
|
case err == nil:
|
||||||
c, err := exec.svc.clientCache.get(exec.key(), ipAddr)
|
c, err := exec.svc.clientCache.get(ipAddr)
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -2,7 +2,6 @@ package searchsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/ecdsa"
|
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -83,7 +82,7 @@ func (p *testPlacementBuilder) BuildPlacement(addr *objectSDK.Address, _ *netmap
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *testClientCache) get(_ *ecdsa.PrivateKey, addr string) (searchClient, error) {
|
func (c *testClientCache) get(addr string) (searchClient, error) {
|
||||||
v, ok := c.clients[addr]
|
v, ok := c.clients[addr]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("could not construct client")
|
return nil, errors.New("could not construct client")
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package searchsvc
|
package searchsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ecdsa"
|
|
||||||
|
|
||||||
"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/container"
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/object"
|
"github.com/nspcc-dev/neofs-api-go/pkg/object"
|
||||||
|
@ -36,7 +34,7 @@ type cfg struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
clientCache interface {
|
clientCache interface {
|
||||||
get(*ecdsa.PrivateKey, string) (searchClient, error)
|
get(string) (searchClient, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
traverserGenerator interface {
|
traverserGenerator interface {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package searchsvc
|
package searchsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ecdsa"
|
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
"github.com/nspcc-dev/neofs-api-go/pkg/client"
|
||||||
|
@ -71,8 +70,8 @@ func (w *uniqueIDWriter) WriteIDs(list []*objectSDK.ID) error {
|
||||||
return w.writer.WriteIDs(list)
|
return w.writer.WriteIDs(list)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *clientCacheWrapper) get(key *ecdsa.PrivateKey, addr string) (searchClient, error) {
|
func (c *clientCacheWrapper) get(addr string) (searchClient, error) {
|
||||||
clt, err := c.cache.Get(key, addr, c.opts...)
|
clt, err := c.cache.Get(addr, c.opts...)
|
||||||
|
|
||||||
return &clientWrapper{
|
return &clientWrapper{
|
||||||
client: clt,
|
client: clt,
|
||||||
|
|
|
@ -116,6 +116,13 @@ func WithNetmapEpoch(v uint64) DynamicCallOption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithKey sets key to use for the request.
|
||||||
|
func WithKey(key *ecdsa.PrivateKey) DynamicCallOption {
|
||||||
|
return func(o *remoteCallOpts) {
|
||||||
|
o.opts = append(o.opts, client.WithKey(key))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (p *CommonPrm) SessionToken() *token.SessionToken {
|
func (p *CommonPrm) SessionToken() *token.SessionToken {
|
||||||
if p != nil {
|
if p != nil {
|
||||||
return p.token
|
return p.token
|
||||||
|
|
Loading…
Reference in a new issue