diff options
author | Innokentii Mokin <innokentii@ydb.tech> | 2024-03-10 11:07:19 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-10 11:07:19 +0300 |
commit | 152f0113e7072d563f6a294401b77cf9e29c62ed (patch) | |
tree | 503db987dcb3631082e1ee4983d665a08b74b03b | |
parent | a258cd15e2ce37187d94adc6a78a9aa95208af54 (diff) | |
download | ydb-152f0113e7072d563f6a294401b77cf9e29c62ed.tar.gz |
[Init] Move cerr/cout calls to separate interface (#2583)
-rw-r--r-- | ydb/core/config/init/init.cpp | 75 | ||||
-rw-r--r-- | ydb/core/config/init/init.h | 52 | ||||
-rw-r--r-- | ydb/core/config/init/init_impl.h | 30 | ||||
-rw-r--r-- | ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp | 130 | ||||
-rw-r--r-- | ydb/core/driver_lib/cli_utils/cli_cmds_server.h | 36 |
5 files changed, 165 insertions, 158 deletions
diff --git a/ydb/core/config/init/init.cpp b/ydb/core/config/init/init.cpp index f238eb9da59..2b69e570315 100644 --- a/ydb/core/config/init/init.cpp +++ b/ydb/core/config/init/init.cpp @@ -280,7 +280,8 @@ class TDefaultNodeBrokerClient const TGrpcSslSettings& grpcSettings, const TVector<TString>& addrs, const TNodeRegistrationSettings& settings, - const IEnv& env) + const IEnv& env, + IInitLogger& logger) { THolder<NClient::TRegistrationResult> result; while (!result || !result->IsSuccess()) { @@ -291,10 +292,10 @@ class TDefaultNodeBrokerClient settings, env); if (result->IsSuccess()) { - Cout << "Success. Registered via legacy service as " << result->GetNodeId() << Endl; + logger.Out() << "Success. Registered via legacy service as " << result->GetNodeId() << Endl; break; } - Cerr << "Registration error: " << result->GetErrorMessage() << Endl; + logger.Err() << "Registration error: " << result->GetErrorMessage() << Endl; } if (!result || !result->IsSuccess()) { env.Sleep(TDuration::Seconds(1)); @@ -311,11 +312,12 @@ class TDefaultNodeBrokerClient return result; } - static NYdb::NDiscovery::TNodeRegistrationResult RegisterDynamicNodeViaDiscoveryService( + static NYdb::NDiscovery::TNodeRegistrationResult RegisterDynamicNodeViaDiscoveryService( const TGrpcSslSettings& grpcSettings, const TVector<TString>& addrs, const NYdb::NDiscovery::TNodeRegistrationSettings& settings, - const IEnv& env) + const IEnv& env, + IInitLogger& logger) { NYdb::NDiscovery::TNodeRegistrationResult result; const size_t maxNumberReceivedCallUnimplemented = 5; @@ -328,10 +330,10 @@ class TDefaultNodeBrokerClient settings, env); if (result.IsSuccess()) { - Cout << "Success. Registered via discovery service as " << result.GetNodeId() << Endl; + logger.Out() << "Success. Registered via discovery service as " << result.GetNodeId() << Endl; break; } - Cerr << "Registration error: " << static_cast<NYdb::TStatus>(result) << Endl; + logger.Err() << "Registration error: " << static_cast<NYdb::TStatus>(result) << Endl; } if (!result.IsSuccess()) { env.Sleep(TDuration::Seconds(1)); @@ -371,7 +373,8 @@ public: const TGrpcSslSettings& grpcSettings, const TVector<TString>& addrs, const TNodeRegistrationSettings& regSettings, - const IEnv& env) const override + const IEnv& env, + IInitLogger& logger) const override { auto newRegSettings = GetNodeRegistrationSettings(regSettings); @@ -381,14 +384,16 @@ public: grpcSettings, addrs, newRegSettings, - env); + env, + logger); if (!std::get<NYdb::NDiscovery::TNodeRegistrationResult>(result).IsSuccess()) { result = RegisterDynamicNodeViaLegacyService( grpcSettings, addrs, regSettings, - env); + env, + logger); } return std::make_unique<TResult>(std::move(result)); @@ -403,6 +408,7 @@ class TDefaultDynConfigClient const TString &addr, const TDynConfigSettings& settings, const IEnv& env, + IInitLogger& logger, TMaybe<NKikimr::NClient::TConfigurationResult>& res, TString &error) { @@ -412,7 +418,7 @@ class TDefaultDynConfigClient env)); auto configurator = kikimr.GetNodeConfigurator(); - Cout << "Trying to get configs from " << addr << Endl; + logger.Out() << "Trying to get configs from " << addr << Endl; auto result = configurator.SyncGetNodeConfig(settings.NodeId, settings.FQDNHostName, @@ -425,11 +431,11 @@ class TDefaultDynConfigClient if (!result.IsSuccess()) { error = result.GetErrorMessage(); - Cerr << "Configuration error: " << error << Endl; + logger.Err() << "Configuration error: " << error << Endl; return false; } - Cout << "Success." << Endl; + logger.Out() << "Success." << Endl; res = result; @@ -440,7 +446,8 @@ public: const TGrpcSslSettings& grpcSettings, const TVector<TString>& addrs, const TDynConfigSettings& settings, - const IEnv& env) const override + const IEnv& env, + IInitLogger& logger) const override { TMaybe<NKikimr::NClient::TConfigurationResult> res; bool success = false; @@ -451,7 +458,7 @@ public: int attempts = 0; while (!success && attempts < minAttempts) { for (auto addr : addrs) { - success = TryToLoadConfigForDynamicNodeFromCMS(grpcSettings, addr, settings, env, res, error); + success = TryToLoadConfigForDynamicNodeFromCMS(grpcSettings, addr, settings, env, logger, res, error); ++attempts; if (success) { break; @@ -466,13 +473,26 @@ public: } if (!success) { - Cerr << "WARNING: couldn't load config from CMS: " << error << Endl; + logger.Err() << "WARNING: couldn't load config from CMS: " << error << Endl; } return res; } }; +class TDefaultInitLogger + : public IInitLogger +{ +public: + IOutputStream& Out() const noexcept override { + return Cout; + } + + IOutputStream& Err() const noexcept override { + return Cerr; + } +}; + std::unique_ptr<IEnv> MakeDefaultEnv() { return std::make_unique<TDefaultEnv>(); } @@ -501,6 +521,10 @@ std::unique_ptr<IDynConfigClient> MakeDefaultDynConfigClient() { return std::make_unique<TDefaultDynConfigClient>(); } +std::unique_ptr<IInitLogger> MakeDefaultInitLogger() { + return std::make_unique<TDefaultInitLogger>(); +} + void CopyNodeLocation(NActorsInterconnect::TNodeLocation* dst, const NYdb::NDiscovery::TNodeLocation& src) { if (src.DataCenterNum) { dst->SetDataCenterNum(src.DataCenterNum.value()); @@ -754,23 +778,8 @@ NKikimrConfig::TAppConfig GetActualDynConfig( return regularConfig; } -std::unique_ptr<IInitialConfigurator> MakeDefaultInitialConfigurator( - NConfig::IErrorCollector& errorCollector, - NConfig::IProtoConfigFileProvider& protoConfigFileProvider, - NConfig::IConfigUpdateTracer& configUpdateTracer, - NConfig::IMemLogInitializer& memLogInit, - NConfig::INodeBrokerClient& nodeBrokerClient, - NConfig::IDynConfigClient& dynConfigClient, - NConfig::IEnv& env) -{ - return std::make_unique<TInitialConfiguratorImpl>( - errorCollector, - protoConfigFileProvider, - configUpdateTracer, - memLogInit, - nodeBrokerClient, - dynConfigClient, - env); +std::unique_ptr<IInitialConfigurator> MakeDefaultInitialConfigurator(TInitialConfiguratorDependencies deps) { + return std::make_unique<TInitialConfiguratorImpl>(deps); } } // namespace NKikimr::NConfig diff --git a/ydb/core/config/init/init.h b/ydb/core/config/init/init.h index 2d2c2d15d16..93ec4136c9f 100644 --- a/ydb/core/config/init/init.h +++ b/ydb/core/config/init/init.h @@ -65,6 +65,13 @@ public: virtual THashMap<ui32, TConfigItemInfo> Dump() const = 0; }; +class IInitLogger { +public: + virtual ~IInitLogger() {} + virtual IOutputStream& Out() const noexcept = 0; + virtual IOutputStream& Err() const noexcept = 0; +}; + // === class IMemLogInitializer { @@ -105,7 +112,8 @@ public: const TGrpcSslSettings& grpcSettings, const TVector<TString>& addrs, const TNodeRegistrationSettings& regSettings, - const IEnv& env) const = 0; + const IEnv& env, + IInitLogger& logger) const = 0; }; // === @@ -126,7 +134,8 @@ public: const TGrpcSslSettings& gs, const TVector<TString>& addrs, const TDynConfigSettings& settings, - const IEnv& env) const = 0; + const IEnv& env, + IInitLogger& logger) const = 0; }; // === @@ -150,6 +159,17 @@ public: THashMap<ui32, TConfigItemInfo>& configInitInfo) const = 0; }; +struct TInitialConfiguratorDependencies { + NConfig::IErrorCollector& ErrorCollector; + NConfig::IProtoConfigFileProvider& ProtoConfigFileProvider; + NConfig::IConfigUpdateTracer& ConfigUpdateTracer; + NConfig::IMemLogInitializer& MemLogInit; + NConfig::INodeBrokerClient& NodeBrokerClient; + NConfig::IDynConfigClient& DynConfigClient; + NConfig::IEnv& Env; + NConfig::IInitLogger& Logger; +}; + std::unique_ptr<IConfigUpdateTracer> MakeDefaultConfigUpdateTracer(); std::unique_ptr<IProtoConfigFileProvider> MakeDefaultProtoConfigFileProvider(); std::unique_ptr<IEnv> MakeDefaultEnv(); @@ -157,34 +177,14 @@ std::unique_ptr<IErrorCollector> MakeDefaultErrorCollector(); std::unique_ptr<IMemLogInitializer> MakeDefaultMemLogInitializer(); std::unique_ptr<INodeBrokerClient> MakeDefaultNodeBrokerClient(); std::unique_ptr<IDynConfigClient> MakeDefaultDynConfigClient(); +std::unique_ptr<IInitLogger> MakeDefaultInitLogger(); -std::unique_ptr<IInitialConfigurator> MakeDefaultInitialConfigurator( - NConfig::IErrorCollector& errorCollector, - NConfig::IProtoConfigFileProvider& protoConfigFileProvider, - NConfig::IConfigUpdateTracer& configUpdateTracer, - NConfig::IMemLogInitializer& memLogInit, - NConfig::INodeBrokerClient& nodeBrokerClient, - NConfig::IDynConfigClient& DynConfigClient, - NConfig::IEnv& env); +std::unique_ptr<IInitialConfigurator> MakeDefaultInitialConfigurator(TInitialConfiguratorDependencies deps); class TInitialConfigurator { public: - TInitialConfigurator( - NConfig::IErrorCollector& errorCollector, - NConfig::IProtoConfigFileProvider& protoConfigFileProvider, - NConfig::IConfigUpdateTracer& configUpdateTracer, - NConfig::IMemLogInitializer& memLogInit, - NConfig::INodeBrokerClient& nodeBrokerClient, - NConfig::IDynConfigClient& dynConfigClient, - NConfig::IEnv& env) - : Impl(MakeDefaultInitialConfigurator( - errorCollector, - protoConfigFileProvider, - configUpdateTracer, - memLogInit, - nodeBrokerClient, - dynConfigClient, - env)) + TInitialConfigurator(TInitialConfiguratorDependencies deps) + : Impl(MakeDefaultInitialConfigurator(deps)) {} void RegisterCliOptions(NLastGetopt::TOpts& opts) { diff --git a/ydb/core/config/init/init_impl.h b/ydb/core/config/init/init_impl.h index e5ea09427bd..70b042e45c2 100644 --- a/ydb/core/config/init/init_impl.h +++ b/ydb/core/config/init/init_impl.h @@ -881,6 +881,7 @@ struct TAppInitDebugInfo { class TInitialConfiguratorImpl : public IInitialConfigurator + , private TInitialConfiguratorDependencies { ui32 NodeId = 0; TBasicKikimrServicesMask ServicesMask; @@ -898,30 +899,9 @@ class TInitialConfiguratorImpl TAppInitDebugInfo InitDebug; - NConfig::IErrorCollector& ErrorCollector; - NConfig::IProtoConfigFileProvider& ProtoConfigFileProvider; - NConfig::IConfigUpdateTracer& ConfigUpdateTracer; - NConfig::IMemLogInitializer& MemLogInit; - NConfig::INodeBrokerClient& NodeBrokerClient; - NConfig::IDynConfigClient& DynConfigClient; - NConfig::IEnv& Env; - public: - TInitialConfiguratorImpl( - NConfig::IErrorCollector& errorCollector, - NConfig::IProtoConfigFileProvider& protoConfigFileProvider, - NConfig::IConfigUpdateTracer& configUpdateTracer, - NConfig::IMemLogInitializer& memLogInit, - NConfig::INodeBrokerClient& nodeBrokerClient, - NConfig::IDynConfigClient& dynConfigClient, - NConfig::IEnv& env) - : ErrorCollector(errorCollector) - , ProtoConfigFileProvider(protoConfigFileProvider) - , ConfigUpdateTracer(configUpdateTracer) - , MemLogInit(memLogInit) - , NodeBrokerClient(nodeBrokerClient) - , DynConfigClient(dynConfigClient) - , Env(env) + TInitialConfiguratorImpl(TInitialConfiguratorDependencies deps) + : TInitialConfiguratorDependencies(deps) {} void ValidateOptions(const NLastGetopt::TOpts& opts, const NLastGetopt::TOptsParseResult& parseResult) override { @@ -1148,7 +1128,7 @@ public: cf.CreateNodeLocation(), }; - auto result = NodeBrokerClient.RegisterDynamicNode(cf.GrpcSslSettings, addrs, settings, Env); + auto result = NodeBrokerClient.RegisterDynamicNode(cf.GrpcSslSettings, addrs, settings, Env, Logger); result->Apply(AppConfig, NodeId, ScopeId); } @@ -1196,7 +1176,7 @@ public: AppConfig.GetAuthConfig().GetStaffApiUserToken(), }; - TMaybe<NKikimr::NClient::TConfigurationResult> result = DynConfigClient.GetConfig(CommonAppOptions.GrpcSslSettings, addrs, settings, Env); + TMaybe<NKikimr::NClient::TConfigurationResult> result = DynConfigClient.GetConfig(CommonAppOptions.GrpcSslSettings, addrs, settings, Env, Logger); if (!result) { return; diff --git a/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp b/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp index 3a0041160d1..65707d8f10a 100644 --- a/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp +++ b/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp @@ -1,84 +1,66 @@ -#include "cli.h" -#include "cli_cmds.h" - -#include <ydb/core/driver_lib/run/run.h> -#include <ydb/core/config/init/init.h> - -#include <memory> +#include "cli_cmds_server.h" namespace NKikimr::NDriverClient { -class TClientCommandServer : public TClientCommand { -public: - TClientCommandServer(std::shared_ptr<TModuleFactories> factories) - : TClientCommand("server", {}, "Execute YDB server") - , Factories(std::move(factories)) - , ErrorCollector(NConfig::MakeDefaultErrorCollector()) - , ProtoConfigFileProvider(NConfig::MakeDefaultProtoConfigFileProvider()) - , ConfigUpdateTracer(NConfig::MakeDefaultConfigUpdateTracer()) - , MemLogInit(NConfig::MakeDefaultMemLogInitializer()) - , NodeBrokerClient(NConfig::MakeDefaultNodeBrokerClient()) - , DynConfigClient(NConfig::MakeDefaultDynConfigClient()) - , Env(NConfig::MakeDefaultEnv()) - , InitCfg( - *ErrorCollector, - *ProtoConfigFileProvider, - *ConfigUpdateTracer, - *MemLogInit, - *NodeBrokerClient, - *DynConfigClient, - *Env) - {} - - int Run(TConfig &/*config*/) override { - NKikimrConfig::TAppConfig appConfig; - - TKikimrRunConfig RunConfig(appConfig); - - InitCfg.Apply( - appConfig, - RunConfig.NodeId, - RunConfig.ScopeId, - RunConfig.TenantName, - RunConfig.ServicesMask, - RunConfig.Labels, - RunConfig.ClusterName, - RunConfig.InitialCmsConfig, - RunConfig.InitialCmsYamlConfig, - RunConfig.ConfigInitInfo); - - Y_ABORT_UNLESS(RunConfig.NodeId); - return MainRun(RunConfig, Factories); - } -protected: - std::shared_ptr<TModuleFactories> Factories; - - std::unique_ptr<NConfig::IErrorCollector> ErrorCollector; - std::unique_ptr<NConfig::IProtoConfigFileProvider> ProtoConfigFileProvider; - std::unique_ptr<NConfig::IConfigUpdateTracer> ConfigUpdateTracer; - std::unique_ptr<NConfig::IMemLogInitializer> MemLogInit; - std::unique_ptr<NConfig::INodeBrokerClient> NodeBrokerClient; - std::unique_ptr<NConfig::IDynConfigClient> DynConfigClient; - std::unique_ptr<NConfig::IEnv> Env; - - NConfig::TInitialConfigurator InitCfg; +TClientCommandServer::TClientCommandServer(std::shared_ptr<TModuleFactories> factories) + : TClientCommand("server", {}, "Execute YDB server") + , Factories(std::move(factories)) + , ErrorCollector(NConfig::MakeDefaultErrorCollector()) + , ProtoConfigFileProvider(NConfig::MakeDefaultProtoConfigFileProvider()) + , ConfigUpdateTracer(NConfig::MakeDefaultConfigUpdateTracer()) + , MemLogInit(NConfig::MakeDefaultMemLogInitializer()) + , NodeBrokerClient(NConfig::MakeDefaultNodeBrokerClient()) + , DynConfigClient(NConfig::MakeDefaultDynConfigClient()) + , Env(NConfig::MakeDefaultEnv()) + , Logger(NConfig::MakeDefaultInitLogger()) + , InitCfg({ + *ErrorCollector, + *ProtoConfigFileProvider, + *ConfigUpdateTracer, + *MemLogInit, + *NodeBrokerClient, + *DynConfigClient, + *Env, + *Logger + }) +{} + +int TClientCommandServer::Run(TConfig& /*config*/) { + NKikimrConfig::TAppConfig appConfig; + + TKikimrRunConfig RunConfig(appConfig); + + InitCfg.Apply( + appConfig, + RunConfig.NodeId, + RunConfig.ScopeId, + RunConfig.TenantName, + RunConfig.ServicesMask, + RunConfig.Labels, + RunConfig.ClusterName, + RunConfig.InitialCmsConfig, + RunConfig.InitialCmsYamlConfig, + RunConfig.ConfigInitInfo); + + Y_ABORT_UNLESS(RunConfig.NodeId); + return MainRun(RunConfig, Factories); +} - void Config(TConfig& config) override { - TClientCommand::Config(config); +void TClientCommandServer::Config(TConfig& config) { + TClientCommand::Config(config); - InitCfg.RegisterCliOptions(*config.Opts); - ProtoConfigFileProvider->RegisterCliOptions(*config.Opts); - config.SetFreeArgsMin(0); + InitCfg.RegisterCliOptions(*config.Opts); + ProtoConfigFileProvider->RegisterCliOptions(*config.Opts); + config.SetFreeArgsMin(0); - config.Opts->AddHelpOption('h'); - } + config.Opts->AddHelpOption('h'); +} - void Parse(TConfig& config) override { - TClientCommand::Parse(config); - InitCfg.ValidateOptions(*config.Opts, *config.ParseResult); - InitCfg.Parse(config.ParseResult->GetFreeArgs()); - } -}; +void TClientCommandServer::Parse(TConfig& config) { + TClientCommand::Parse(config); + InitCfg.ValidateOptions(*config.Opts, *config.ParseResult); + InitCfg.Parse(config.ParseResult->GetFreeArgs()); +} void AddClientCommandServer(TClientCommandTree& parent, std::shared_ptr<TModuleFactories> factories) { parent.AddCommand(std::make_unique<TClientCommandServer>(factories)); diff --git a/ydb/core/driver_lib/cli_utils/cli_cmds_server.h b/ydb/core/driver_lib/cli_utils/cli_cmds_server.h new file mode 100644 index 00000000000..4646f37da52 --- /dev/null +++ b/ydb/core/driver_lib/cli_utils/cli_cmds_server.h @@ -0,0 +1,36 @@ +#pragma once + +#include "cli.h" +#include "cli_cmds.h" + +#include <ydb/core/driver_lib/run/run.h> +#include <ydb/core/config/init/init.h> + +#include <memory> + +namespace NKikimr::NDriverClient { + +class TClientCommandServer : public TClientCommand { +public: + TClientCommandServer(std::shared_ptr<TModuleFactories> factories); + + int Run(TConfig& config) override; + void Config(TConfig& config) override; + void Parse(TConfig& config) override; + +protected: + std::shared_ptr<TModuleFactories> Factories; + + std::unique_ptr<NConfig::IErrorCollector> ErrorCollector; + std::unique_ptr<NConfig::IProtoConfigFileProvider> ProtoConfigFileProvider; + std::unique_ptr<NConfig::IConfigUpdateTracer> ConfigUpdateTracer; + std::unique_ptr<NConfig::IMemLogInitializer> MemLogInit; + std::unique_ptr<NConfig::INodeBrokerClient> NodeBrokerClient; + std::unique_ptr<NConfig::IDynConfigClient> DynConfigClient; + std::unique_ptr<NConfig::IEnv> Env; + std::unique_ptr<NConfig::IInitLogger> Logger; + + NConfig::TInitialConfigurator InitCfg; +}; + +} // namespace NKikimr::NDriverClient |