Skip to content

Commit

Permalink
Enable/disable ssl connections, return connection_string in API
Browse files Browse the repository at this point in the history
  • Loading branch information
CyberROFL committed Jul 24, 2024
1 parent 39cb9cf commit dd85329
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 25 deletions.
11 changes: 11 additions & 0 deletions ydb/core/grpc_services/rpc_replication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@

#include <google/protobuf/util/time_util.h>

#include <util/string/builder.h>

namespace NKikimr::NGRpcService {

using namespace Ydb;
Expand Down Expand Up @@ -138,9 +140,18 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
return ReplyWithResult(Ydb::StatusIds::SUCCESS, Result, ctx);
}

static TString BuildConnectionString(const NKikimrReplication::TConnectionParams& params) {
return TStringBuilder()
<< (params.GetEnableSsl() ? "grpcs://" : "grpc://")
<< params.GetEndpoint()
<< "/?database=" << params.GetDatabase();
}

static void ConvertConnectionParams(const NKikimrReplication::TConnectionParams& from, Ydb::Replication::ConnectionParams& to) {
to.set_endpoint(from.GetEndpoint());
to.set_database(from.GetDatabase());
to.set_enable_ssl(from.GetEnableSsl());
to.set_connection_string(BuildConnectionString(from));

switch (from.GetCredentialsCase()) {
case NKikimrReplication::TConnectionParams::kStaticCredentials:
Expand Down
1 change: 1 addition & 0 deletions ydb/core/kqp/host/kqp_gateway_proxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1912,6 +1912,7 @@ class TKqpGatewayProxy : public IKikimrGateway {
const auto parseResult = NYdb::ParseConnectionString(*connectionString);
params.SetEndpoint(parseResult.Endpoint);
params.SetDatabase(parseResult.Database);
params.SetEnableSsl(parseResult.EnableSsl);
}
if (const auto& endpoint = settings.Settings.Endpoint) {
params.SetEndpoint(*endpoint);
Expand Down
1 change: 1 addition & 0 deletions ydb/core/protos/replication.proto
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ message TOAuthToken {
message TConnectionParams {
optional string Endpoint = 1;
optional string Database = 2;
optional bool EnableSsl = 5;
// credentials
oneof Credentials {
TStaticCredentials StaticCredentials = 3;
Expand Down
7 changes: 5 additions & 2 deletions ydb/core/tx/replication/controller/replication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,19 +115,22 @@ class TReplication::TImpl: public TLagProvider {
if (!YdbProxy && !(State == EState::Removing && !Targets)) {
THolder<IActor> 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());
Expand Down
22 changes: 15 additions & 7 deletions ydb/core/tx/replication/service/service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,9 @@ class TSessionInfo {

}; // TSessionInfo

struct TCredentialsKey: std::tuple<TString, TString, TString> {
explicit TCredentialsKey(const TString& endpoint, const TString& database, const TString& user)
: std::tuple<TString, TString, TString>(endpoint, database, user)
struct TCredentialsKey: std::tuple<TString, TString, bool, TString> {
explicit TCredentialsKey(const TString& endpoint, const TString& database, bool ssl, const TString& user)
: std::tuple<TString, TString, bool, TString>(endpoint, database, ssl, user)
{
}

Expand All @@ -139,12 +139,20 @@ struct TCredentialsKey: std::tuple<TString, TString, TString> {
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");
}
Expand All @@ -155,7 +163,7 @@ struct TCredentialsKey: std::tuple<TString, TString, TString> {
} // NKikimr::NReplication::NService

template <>
struct THash<NKikimr::NReplication::NService::TCredentialsKey> : THash<std::tuple<TString, TString, TString>> {};
struct THash<NKikimr::NReplication::NService::TCredentialsKey> : THash<std::tuple<TString, TString, bool, TString>> {};

namespace NKikimr::NReplication {

Expand Down Expand Up @@ -212,7 +220,7 @@ class TReplicationService: public TActorBootstrapped<TReplicationService> {
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>(args)...));
auto ydbProxy = Register(CreateYdbProxy(key.Endpoint(), key.Database(), key.EnableSsl(), std::forward<Args>(args)...));
auto res = YdbProxies.emplace(std::move(key), std::move(ydbProxy));
Y_ABORT_UNLESS(res.second);
it = res.first;
Expand Down
2 changes: 1 addition & 1 deletion ydb/core/tx/replication/ut_helpers/test_env.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class TEnv {
Database = "/" + ToString(DomainName);

YdbProxy = Server.GetRuntime()->Register(CreateYdbProxy(
Endpoint, UseDatabase ? Database : "", std::forward<Args>(args)...));
Endpoint, UseDatabase ? Database : "", false /* ssl */, std::forward<Args>(args)...));
Sender = Server.GetRuntime()->AllocateEdgeActor();
}

Expand Down
25 changes: 13 additions & 12 deletions ydb/core/tx/replication/ydb_proxy/ydb_proxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -419,20 +419,21 @@ class TYdbProxy: public TBaseProxyActor<TYdbProxy> {
Call<TEvYdbProxy::TEvCommitOffsetResponse>(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(),
Expand Down Expand Up @@ -485,16 +486,16 @@ class TYdbProxy: public TBaseProxyActor<TYdbProxy> {

}; // 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);
}

}
Expand Down
6 changes: 3 additions & 3 deletions ydb/core/tx/replication/ydb_proxy/ydb_proxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

}
2 changes: 2 additions & 0 deletions ydb/public/api/protos/draft/ydb_replication.proto
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit dd85329

Please sign in to comment.