From 21c32a1c5e5e131e97422a8b7c414ff70ce934ac Mon Sep 17 00:00:00 2001 From: Ilnaz Nizametdinov Date: Wed, 24 Jul 2024 21:23:10 +0300 Subject: [PATCH] Enable/disable ssl connections, return connection_string in API (#7040) --- ydb/core/grpc_services/rpc_replication.cpp | 11 ++++ ydb/core/kqp/host/kqp_gateway_proxy.cpp | 1 + ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp | 55 +++++++++++++++++++ ydb/core/protos/replication.proto | 1 + .../tx/replication/controller/replication.cpp | 7 ++- ydb/core/tx/replication/service/service.cpp | 22 +++++--- ydb/core/tx/replication/ut_helpers/test_env.h | 2 +- .../tx/replication/ydb_proxy/ydb_proxy.cpp | 25 +++++---- ydb/core/tx/replication/ydb_proxy/ydb_proxy.h | 6 +- .../api/protos/draft/ydb_replication.proto | 2 + .../sdk/cpp/client/draft/ydb_replication.cpp | 5 ++ .../sdk/cpp/client/draft/ydb_replication.h | 1 + 12 files changed, 113 insertions(+), 25 deletions(-) diff --git a/ydb/core/grpc_services/rpc_replication.cpp b/ydb/core/grpc_services/rpc_replication.cpp index 83c28cc04845..8b75b72a08d0 100644 --- a/ydb/core/grpc_services/rpc_replication.cpp +++ b/ydb/core/grpc_services/rpc_replication.cpp @@ -11,6 +11,8 @@ #include +#include + namespace NKikimr::NGRpcService { using namespace Ydb; @@ -138,9 +140,18 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor ydbProxy; const auto& params = Config.GetSrcConnectionParams(); + const auto& endpoint = params.GetEndpoint(); + const auto& database = params.GetDatabase(); + const bool ssl = params.GetEnableSsl(); switch (params.GetCredentialsCase()) { case NKikimrReplication::TConnectionParams::kStaticCredentials: if (!params.GetStaticCredentials().HasPassword()) { return ResolveSecret(params.GetStaticCredentials().GetPasswordSecretName(), ctx); } - ydbProxy.Reset(CreateYdbProxy(params.GetEndpoint(), params.GetDatabase(), params.GetStaticCredentials())); + ydbProxy.Reset(CreateYdbProxy(endpoint, database, ssl, params.GetStaticCredentials())); break; case NKikimrReplication::TConnectionParams::kOAuthToken: if (!params.GetOAuthToken().HasToken()) { return ResolveSecret(params.GetOAuthToken().GetTokenSecretName(), ctx); } - ydbProxy.Reset(CreateYdbProxy(params.GetEndpoint(), params.GetDatabase(), params.GetOAuthToken().GetToken())); + ydbProxy.Reset(CreateYdbProxy(endpoint, database, ssl, params.GetOAuthToken().GetToken())); break; default: ErrorState(TStringBuilder() << "Unexpected credentials: " << params.GetCredentialsCase()); diff --git a/ydb/core/tx/replication/service/service.cpp b/ydb/core/tx/replication/service/service.cpp index a8ea5d64ef5f..0e399990b268 100644 --- a/ydb/core/tx/replication/service/service.cpp +++ b/ydb/core/tx/replication/service/service.cpp @@ -125,9 +125,9 @@ class TSessionInfo { }; // TSessionInfo -struct TCredentialsKey: std::tuple { - explicit TCredentialsKey(const TString& endpoint, const TString& database, const TString& user) - : std::tuple(endpoint, database, user) +struct TCredentialsKey: std::tuple { + explicit TCredentialsKey(const TString& endpoint, const TString& database, bool ssl, const TString& user) + : std::tuple(endpoint, database, ssl, user) { } @@ -139,12 +139,20 @@ struct TCredentialsKey: std::tuple { return std::get<1>(*this); } + bool EnableSsl() const { + return std::get<2>(*this); + } + static TCredentialsKey FromParams(const NKikimrReplication::TConnectionParams& params) { + const auto& endpoint = params.GetEndpoint(); + const auto& database = params.GetDatabase(); + const bool ssl = params.GetEnableSsl(); + switch (params.GetCredentialsCase()) { case NKikimrReplication::TConnectionParams::kStaticCredentials: - return TCredentialsKey(params.GetEndpoint(), params.GetDatabase(), params.GetStaticCredentials().GetUser()); + return TCredentialsKey(endpoint, database, ssl, params.GetStaticCredentials().GetUser()); case NKikimrReplication::TConnectionParams::kOAuthToken: - return TCredentialsKey(params.GetEndpoint(), params.GetDatabase(), params.GetOAuthToken().GetToken() /* TODO */); + return TCredentialsKey(endpoint, database, ssl, params.GetOAuthToken().GetToken()); default: Y_ABORT("Unexpected credentials"); } @@ -155,7 +163,7 @@ struct TCredentialsKey: std::tuple { } // NKikimr::NReplication::NService template <> -struct THash : THash> {}; +struct THash : THash> {}; namespace NKikimr::NReplication { @@ -212,7 +220,7 @@ class TReplicationService: public TActorBootstrapped { const TActorId& GetOrCreateYdbProxy(TCredentialsKey&& key, Args&&... args) { auto it = YdbProxies.find(key); if (it == YdbProxies.end()) { - auto ydbProxy = Register(CreateYdbProxy(key.Endpoint(), key.Database(), std::forward(args)...)); + auto ydbProxy = Register(CreateYdbProxy(key.Endpoint(), key.Database(), key.EnableSsl(), std::forward(args)...)); auto res = YdbProxies.emplace(std::move(key), std::move(ydbProxy)); Y_ABORT_UNLESS(res.second); it = res.first; diff --git a/ydb/core/tx/replication/ut_helpers/test_env.h b/ydb/core/tx/replication/ut_helpers/test_env.h index f0aec854575f..6920d0f2e921 100644 --- a/ydb/core/tx/replication/ut_helpers/test_env.h +++ b/ydb/core/tx/replication/ut_helpers/test_env.h @@ -32,7 +32,7 @@ class TEnv { Database = "/" + ToString(DomainName); YdbProxy = Server.GetRuntime()->Register(CreateYdbProxy( - Endpoint, UseDatabase ? Database : "", std::forward(args)...)); + Endpoint, UseDatabase ? Database : "", false /* ssl */, std::forward(args)...)); Sender = Server.GetRuntime()->AllocateEdgeActor(); } diff --git a/ydb/core/tx/replication/ydb_proxy/ydb_proxy.cpp b/ydb/core/tx/replication/ydb_proxy/ydb_proxy.cpp index ccd65e9cc62e..a92aa13aec37 100644 --- a/ydb/core/tx/replication/ydb_proxy/ydb_proxy.cpp +++ b/ydb/core/tx/replication/ydb_proxy/ydb_proxy.cpp @@ -419,20 +419,21 @@ class TYdbProxy: public TBaseProxyActor { Call(ev, &TTopicClient::CommitOffset); } - static TCommonClientSettings MakeSettings(const TString& endpoint, const TString& database) { + static TCommonClientSettings MakeSettings(const TString& endpoint, const TString& database, bool ssl) { return TCommonClientSettings() .DiscoveryEndpoint(endpoint) .DiscoveryMode(EDiscoveryMode::Async) - .Database(database); + .Database(database) + .SslCredentials(ssl); } - static TCommonClientSettings MakeSettings(const TString& endpoint, const TString& database, const TString& token) { - return MakeSettings(endpoint, database) + static TCommonClientSettings MakeSettings(const TString& endpoint, const TString& database, bool ssl, const TString& token) { + return MakeSettings(endpoint, database, ssl) .AuthToken(token); } - static TCommonClientSettings MakeSettings(const TString& endpoint, const TString& database, const TStaticCredentials& credentials) { - return MakeSettings(endpoint, database) + static TCommonClientSettings MakeSettings(const TString& endpoint, const TString& database, bool ssl, const TStaticCredentials& credentials) { + return MakeSettings(endpoint, database, ssl) .CredentialsProviderFactory(CreateLoginCredentialsProviderFactory({ .User = credentials.GetUser(), .Password = credentials.GetPassword(), @@ -485,16 +486,16 @@ class TYdbProxy: public TBaseProxyActor { }; // TYdbProxy -IActor* CreateYdbProxy(const TString& endpoint, const TString& database) { - return new TYdbProxy(endpoint, database); +IActor* CreateYdbProxy(const TString& endpoint, const TString& database, bool ssl) { + return new TYdbProxy(endpoint, database, ssl); } -IActor* CreateYdbProxy(const TString& endpoint, const TString& database, const TString& token) { - return new TYdbProxy(endpoint, database, token); +IActor* CreateYdbProxy(const TString& endpoint, const TString& database, bool ssl, const TString& token) { + return new TYdbProxy(endpoint, database, ssl, token); } -IActor* CreateYdbProxy(const TString& endpoint, const TString& database, const TStaticCredentials& credentials) { - return new TYdbProxy(endpoint, database, credentials); +IActor* CreateYdbProxy(const TString& endpoint, const TString& database, bool ssl, const TStaticCredentials& credentials) { + return new TYdbProxy(endpoint, database, ssl, credentials); } } diff --git a/ydb/core/tx/replication/ydb_proxy/ydb_proxy.h b/ydb/core/tx/replication/ydb_proxy/ydb_proxy.h index 8eba5e9a00a2..9b9c13244679 100644 --- a/ydb/core/tx/replication/ydb_proxy/ydb_proxy.h +++ b/ydb/core/tx/replication/ydb_proxy/ydb_proxy.h @@ -255,9 +255,9 @@ struct TEvYdbProxy { #pragma pop_macro("RemoveDirectory") -IActor* CreateYdbProxy(const TString& endpoint, const TString& database); -IActor* CreateYdbProxy(const TString& endpoint, const TString& database, const TString& token); -IActor* CreateYdbProxy(const TString& endpoint, const TString& database, +IActor* CreateYdbProxy(const TString& endpoint, const TString& database, bool ssl); +IActor* CreateYdbProxy(const TString& endpoint, const TString& database, bool ssl, const TString& token); +IActor* CreateYdbProxy(const TString& endpoint, const TString& database, bool ssl, const NKikimrReplication::TStaticCredentials& credentials); } diff --git a/ydb/public/api/protos/draft/ydb_replication.proto b/ydb/public/api/protos/draft/ydb_replication.proto index c1421a05e2ab..8695f025bc25 100644 --- a/ydb/public/api/protos/draft/ydb_replication.proto +++ b/ydb/public/api/protos/draft/ydb_replication.proto @@ -36,6 +36,8 @@ message ConnectionParams { string endpoint = 1; string database = 2; + bool enable_ssl = 5; + string connection_string = 6; oneof credentials { StaticCredentials static_credentials = 3; diff --git a/ydb/public/sdk/cpp/client/draft/ydb_replication.cpp b/ydb/public/sdk/cpp/client/draft/ydb_replication.cpp index 181a3f2d4171..bc0fe1f80fd9 100644 --- a/ydb/public/sdk/cpp/client/draft/ydb_replication.cpp +++ b/ydb/public/sdk/cpp/client/draft/ydb_replication.cpp @@ -19,6 +19,7 @@ namespace NReplication { TConnectionParams::TConnectionParams(const Ydb::Replication::ConnectionParams& params) { DiscoveryEndpoint(params.endpoint()); Database(params.database()); + SslCredentials(params.enable_ssl()); switch (params.credentials_case()) { case Ydb::Replication::ConnectionParams::kStaticCredentials: @@ -47,6 +48,10 @@ const TString& TConnectionParams::GetDatabase() const { return *Database_; } +bool TConnectionParams::GetEnableSsl() const { + return SslCredentials_->IsEnabled; +} + TConnectionParams::ECredentials TConnectionParams::GetCredentials() const { return static_cast(Credentials_.index()); } diff --git a/ydb/public/sdk/cpp/client/draft/ydb_replication.h b/ydb/public/sdk/cpp/client/draft/ydb_replication.h index ee7db99f197b..ba63be422450 100644 --- a/ydb/public/sdk/cpp/client/draft/ydb_replication.h +++ b/ydb/public/sdk/cpp/client/draft/ydb_replication.h @@ -52,6 +52,7 @@ class TConnectionParams: private TCommonClientSettings { const TString& GetDiscoveryEndpoint() const; const TString& GetDatabase() const; + bool GetEnableSsl() const; ECredentials GetCredentials() const; const TStaticCredentials& GetStaticCredentials() const;