From c94372e6f9aaa611cbab943508e5940b69cebe40 Mon Sep 17 00:00:00 2001 From: Dmitrii Stepanov Date: Fri, 24 Mar 2023 09:09:08 +0300 Subject: [PATCH] [#168] node: Refactor config initialization Resolve funlen linter for initCfg function Signed-off-by: Dmitrii Stepanov --- cmd/frostfs-node/config.go | 172 ++++++++++++++++++++++--------------- 1 file changed, 103 insertions(+), 69 deletions(-) diff --git a/cmd/frostfs-node/config.go b/cmd/frostfs-node/config.go index cea750451..04dd1bfd3 100644 --- a/cmd/frostfs-node/config.go +++ b/cmd/frostfs-node/config.go @@ -541,7 +541,6 @@ type cfgReputation struct { var persistateSideChainLastBlockKey = []byte("side_chain_last_processed_block") -// nolint: funlen func initCfg(appCfg *config.Config) *cfg { c := &cfg{} @@ -558,86 +557,29 @@ func initCfg(appCfg *config.Config) *cfg { log, err := logger.NewLogger(logPrm) fatalOnErr(err) - var netAddr network.AddressGroup + c.internals = initInternals(appCfg, log) relayOnly := nodeconfig.Relay(appCfg) - if !relayOnly { - netAddr = nodeconfig.BootstrapAddresses(appCfg) - } - - maxChunkSize := uint64(maxMsgSize) * 3 / 4 // 25% to meta, 75% to payload - maxAddrAmount := uint64(maxChunkSize) / addressSize // each address is about 72 bytes netState := newNetworkState() - persistate, err := state.NewPersistentStorage(nodeconfig.PersistentState(appCfg).Path()) - fatalOnErr(err) + c.shared = initShared(appCfg, key, netState, relayOnly) - containerWorkerPool, err := ants.NewPool(notificationHandlerPoolSize) - fatalOnErr(err) - - netmapWorkerPool, err := ants.NewPool(notificationHandlerPoolSize) - fatalOnErr(err) - - reputationWorkerPool, err := ants.NewPool(notificationHandlerPoolSize) - fatalOnErr(err) - - c.internals = internals{ - done: make(chan struct{}), - appCfg: appCfg, - internalErr: make(chan error), - log: log, - wg: new(sync.WaitGroup), - apiVersion: version.Current(), - healthStatus: atomic.NewInt32(int32(control.HealthStatus_HEALTH_STATUS_UNDEFINED)), - } - - cacheOpts := cache.ClientCacheOpts{ - DialTimeout: apiclientconfig.DialTimeout(appCfg), - StreamTimeout: apiclientconfig.StreamTimeout(appCfg), - Key: &key.PrivateKey, - AllowExternal: apiclientconfig.AllowExternal(appCfg), - 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), - putClientCache: cache.NewSDKClientCache(cacheOpts), - persistate: persistate, - } c.cfgAccounting = cfgAccounting{ scriptHash: contractsconfig.Balance(appCfg), } - c.cfgContainer = cfgContainer{ - scriptHash: contractsconfig.Container(appCfg), - workerPool: containerWorkerPool, - } - c.cfgNetmap = cfgNetmap{ - scriptHash: contractsconfig.Netmap(appCfg), - state: netState, - workerPool: netmapWorkerPool, - needBootstrap: !relayOnly, - reBoostrapTurnedOff: atomic.NewBool(relayOnly), - } - c.cfgGRPC = cfgGRPC{ - maxChunkSize: maxChunkSize, - maxAddrAmount: maxAddrAmount, - } + c.cfgContainer = initContainer(appCfg) + + c.cfgNetmap = initNetmap(appCfg, netState, relayOnly) + + c.cfgGRPC = initCfgGRPC() + c.cfgMorph = cfgMorph{ proxyScriptHash: contractsconfig.Proxy(appCfg), } - c.cfgObject = cfgObject{ - pool: initObjectPool(appCfg), - tombstoneLifetime: objectconfig.TombstoneLifetime(appCfg), - } - c.cfgReputation = cfgReputation{ - scriptHash: contractsconfig.Reputation(appCfg), - workerPool: reputationWorkerPool, - } + c.cfgObject = initCfgObject(appCfg) + + c.cfgReputation = initReputation(appCfg) user.IDFromKey(&c.ownerIDFromKey, key.PrivateKey.PublicKey) @@ -652,6 +594,98 @@ func initCfg(appCfg *config.Config) *cfg { return c } +func initInternals(appCfg *config.Config, log *logger.Logger) internals { + return internals{ + done: make(chan struct{}), + appCfg: appCfg, + internalErr: make(chan error), + log: log, + wg: new(sync.WaitGroup), + apiVersion: version.Current(), + healthStatus: atomic.NewInt32(int32(control.HealthStatus_HEALTH_STATUS_UNDEFINED)), + } +} + +func initShared(appCfg *config.Config, key *keys.PrivateKey, netState *networkState, relayOnly bool) shared { + var netAddr network.AddressGroup + + if !relayOnly { + netAddr = nodeconfig.BootstrapAddresses(appCfg) + } + + persistate, err := state.NewPersistentStorage(nodeconfig.PersistentState(appCfg).Path()) + fatalOnErr(err) + + cacheOpts := cache.ClientCacheOpts{ + DialTimeout: apiclientconfig.DialTimeout(appCfg), + StreamTimeout: apiclientconfig.StreamTimeout(appCfg), + Key: &key.PrivateKey, + AllowExternal: apiclientconfig.AllowExternal(appCfg), + ReconnectTimeout: apiclientconfig.ReconnectTimeout(appCfg), + } + + return shared{ + 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, + } +} + +func initNetmap(appCfg *config.Config, netState *networkState, relayOnly bool) cfgNetmap { + netmapWorkerPool, err := ants.NewPool(notificationHandlerPoolSize) + fatalOnErr(err) + + return cfgNetmap{ + scriptHash: contractsconfig.Netmap(appCfg), + state: netState, + workerPool: netmapWorkerPool, + needBootstrap: !relayOnly, + reBoostrapTurnedOff: atomic.NewBool(relayOnly), + } +} + +func initContainer(appCfg *config.Config) cfgContainer { + containerWorkerPool, err := ants.NewPool(notificationHandlerPoolSize) + fatalOnErr(err) + + return cfgContainer{ + scriptHash: contractsconfig.Container(appCfg), + workerPool: containerWorkerPool, + } +} + +func initReputation(appCfg *config.Config) cfgReputation { + reputationWorkerPool, err := ants.NewPool(notificationHandlerPoolSize) + fatalOnErr(err) + + return cfgReputation{ + scriptHash: contractsconfig.Reputation(appCfg), + workerPool: reputationWorkerPool, + } +} + +func initCfgGRPC() cfgGRPC { + maxChunkSize := uint64(maxMsgSize) * 3 / 4 // 25% to meta, 75% to payload + maxAddrAmount := uint64(maxChunkSize) / addressSize // each address is about 72 bytes + + return cfgGRPC{ + maxChunkSize: maxChunkSize, + maxAddrAmount: maxAddrAmount, + } +} + +func initCfgObject(appCfg *config.Config) cfgObject { + return cfgObject{ + pool: initObjectPool(appCfg), + tombstoneLifetime: objectconfig.TombstoneLifetime(appCfg), + } +} + func (c *cfg) engineOpts() []engine.Option { opts := make([]engine.Option, 0, 4)