Skip to content

Commit

Permalink
[#2260] node: Use a separate client cache for PUT service
Browse files Browse the repository at this point in the history
Currently, under a mixed load one failed PUT can lead to closing
connection for all concurrent GETs. For PUT it does no harm: we have
many other nodes to choose from. For GET we are limited by `REP N`
factor, so in case of failover we can close the connection with the only
node posessing an object, which leads to failing the whole operation.

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
  • Loading branch information
fyrchik committed Feb 17, 2023
1 parent 9cc9f6d commit cb6fe97
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 13 deletions.
27 changes: 15 additions & 12 deletions cmd/neofs-node/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -342,9 +342,10 @@ type shared struct {
privateTokenStore sessionStorage
persistate *state.PersistentStorage

clientCache *cache.ClientCache
bgClientCache *cache.ClientCache
localAddr network.AddressGroup
clientCache *cache.ClientCache
bgClientCache *cache.ClientCache
putClientCache *cache.ClientCache
localAddr network.AddressGroup

key *keys.PrivateKey
binPublicKey []byte
Expand Down Expand Up @@ -570,13 +571,14 @@ func initCfg(appCfg *config.Config) *cfg {
ReconnectTimeout: apiclientconfig.ReconnectTimeout(appCfg),
}
c.shared = shared{
key: key,
binPublicKey: key.PublicKey().Bytes(),
localAddr: netAddr,
respSvc: response.NewService(response.WithNetworkState(netState)),
clientCache: cache.NewSDKClientCache(cacheOpts),
bgClientCache: cache.NewSDKClientCache(cacheOpts),
persistate: persistate,
key: key,
binPublicKey: key.PublicKey().Bytes(),
localAddr: netAddr,
respSvc: response.NewService(response.WithNetworkState(netState)),
clientCache: cache.NewSDKClientCache(cacheOpts),
bgClientCache: cache.NewSDKClientCache(cacheOpts),
putClientCache: cache.NewSDKClientCache(cacheOpts),
persistate: persistate,
}
c.cfgAccounting = cfgAccounting{
scriptHash: contractsconfig.Balance(appCfg),
Expand Down Expand Up @@ -615,8 +617,9 @@ func initCfg(appCfg *config.Config) *cfg {
netState.metrics = c.metricsCollector
}

c.onShutdown(c.clientCache.CloseAll) // clean up connections
c.onShutdown(c.bgClientCache.CloseAll) // clean up connections
c.onShutdown(c.clientCache.CloseAll) // clean up connections
c.onShutdown(c.bgClientCache.CloseAll) // clean up connections
c.onShutdown(c.putClientCache.CloseAll) // clean up connections
c.onShutdown(func() { _ = c.persistate.Close() })

return c
Expand Down
10 changes: 9 additions & 1 deletion cmd/neofs-node/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,14 @@ func initObjectService(c *cfg) {
basicConstructor: c.clientCache,
}

putConstructor := &coreClientConstructor{
log: c.log,
nmSrc: c.netMapSource,
netState: c.cfgNetmap.state,
trustStorage: c.cfgReputation.localTrustStorage,
basicConstructor: c.putClientCache,
}

var irFetcher v2.InnerRingFetcher

if c.cfgMorph.client.ProbeNotary() {
Expand Down Expand Up @@ -255,7 +263,7 @@ func initObjectService(c *cfg) {

sPut := putsvc.NewService(
putsvc.WithKeyStorage(keyStorage),
putsvc.WithClientConstructor(coreConstructor),
putsvc.WithClientConstructor(putConstructor),
putsvc.WithMaxSizeSource(newCachedMaxObjectSizeSource(c)),
putsvc.WithObjectStorage(os),
putsvc.WithContainerSource(c.cfgObject.cnrSource),
Expand Down

0 comments on commit cb6fe97

Please sign in to comment.