Skip to content

Commit 4fc005b

Browse files
Merge a0fc4ef into 4eb9bf7
2 parents 4eb9bf7 + a0fc4ef commit 4fc005b

File tree

8 files changed

+68
-0
lines changed

8 files changed

+68
-0
lines changed

ydb/core/fq/libs/actors/clusters_from_connections.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,18 @@ void AddClustersFromConnections(
283283
clusters.emplace(connectionName, GenericProviderName);
284284
break;
285285
}
286+
case FederatedQuery::ConnectionSetting::kMysqlCluster: {
287+
FillGenericClusterConfig(
288+
common,
289+
*gatewaysConfig.MutableGeneric()->AddClusterMapping(),
290+
conn.content().setting().greenplum_cluster(),
291+
connectionName,
292+
NYql::NConnector::NApi::EDataSourceKind::GREENPLUM,
293+
authToken,
294+
accountIdSignatures);
295+
clusters.emplace(connectionName, GenericProviderName);
296+
break;
297+
}
286298

287299
// Do not replace with default. Adding a new connection should cause a compilation error
288300
case FederatedQuery::ConnectionSetting::CONNECTION_NOT_SET:

ydb/core/fq/libs/common/util.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ TString ExtractServiceAccountId(const FederatedQuery::ConnectionSetting& setting
129129
case FederatedQuery::ConnectionSetting::kGreenplumCluster: {
130130
return GetServiceAccountId(setting.greenplum_cluster().auth());
131131
}
132+
case FederatedQuery::ConnectionSetting::kMysqlCluster: {
133+
return GetServiceAccountId(setting.mysql_cluster().auth());
134+
}
132135
// Do not replace with default. Adding a new connection should cause a compilation error
133136
case FederatedQuery::ConnectionSetting::CONNECTION_NOT_SET:
134137
break;
@@ -162,6 +165,8 @@ TMaybe<TString> GetLogin(const FederatedQuery::ConnectionSetting& setting) {
162165
return setting.postgresql_cluster().login();
163166
case FederatedQuery::ConnectionSetting::kGreenplumCluster:
164167
return setting.greenplum_cluster().login();
168+
case FederatedQuery::ConnectionSetting::kMysqlCluster:
169+
return setting.greenplum_cluster().login();
165170
}
166171
}
167172

@@ -183,6 +188,8 @@ TMaybe<TString> GetPassword(const FederatedQuery::ConnectionSetting& setting) {
183188
return setting.postgresql_cluster().password();
184189
case FederatedQuery::ConnectionSetting::kGreenplumCluster:
185190
return setting.greenplum_cluster().password();
191+
case FederatedQuery::ConnectionSetting::kMysqlCluster:
192+
return setting.mysql_cluster().password();
186193
}
187194
}
188195

@@ -204,6 +211,8 @@ EYdbComputeAuth GetYdbComputeAuthMethod(const FederatedQuery::ConnectionSetting&
204211
return GetBasicAuthMethod(setting.postgresql_cluster().auth());
205212
case FederatedQuery::ConnectionSetting::kGreenplumCluster:
206213
return GetBasicAuthMethod(setting.greenplum_cluster().auth());
214+
case FederatedQuery::ConnectionSetting::kMysqlCluster:
215+
return GetBasicAuthMethod(setting.mysql_cluster().auth());
207216
}
208217
}
209218

@@ -223,6 +232,8 @@ FederatedQuery::IamAuth GetAuth(const FederatedQuery::Connection& connection) {
223232
return connection.content().setting().postgresql_cluster().auth();
224233
case FederatedQuery::ConnectionSetting::kGreenplumCluster:
225234
return connection.content().setting().greenplum_cluster().auth();
235+
case FederatedQuery::ConnectionSetting::kMysqlCluster:
236+
return connection.content().setting().mysql_cluster().auth();
226237
case FederatedQuery::ConnectionSetting::CONNECTION_NOT_SET:
227238
return FederatedQuery::IamAuth{};
228239
}

ydb/core/fq/libs/compute/common/config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ class TComputeConfig {
165165
case FederatedQuery::ConnectionSetting::kClickhouseCluster:
166166
case FederatedQuery::ConnectionSetting::kPostgresqlCluster:
167167
case FederatedQuery::ConnectionSetting::kGreenplumCluster:
168+
case FederatedQuery::ConnectionSetting::kMysqlCluster:
168169
case FederatedQuery::ConnectionSetting::kYdbDatabase:
169170
return true;
170171
case FederatedQuery::ConnectionSetting::kDataStreams:

ydb/core/fq/libs/control_plane_proxy/actors/query_utils.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,20 @@ TString MakeCreateExternalDataSourceQuery(
247247
"use_tls"_a = common.GetDisableSslForGenericDataSources() ? "false" : "true",
248248
"schema"_a = gpschema ? ", SCHEMA=" + EncloseAndEscapeString(gpschema, '"') : TString{});
249249

250+
}
251+
case FederatedQuery::ConnectionSetting::kMysqlCluster: {
252+
properties = fmt::format(
253+
R"(
254+
SOURCE_TYPE="MySQL",
255+
MDB_CLUSTER_ID={mdb_cluster_id},
256+
DATABASE_NAME={database_name},
257+
USE_TLS="{use_tls}"
258+
{schema}
259+
)",
260+
"mdb_cluster_id"_a = EncloseAndEscapeString(connectionContent.setting().mysql_cluster().database_id(), '"'),
261+
"database_name"_a = EncloseAndEscapeString(connectionContent.setting().mysql_cluster().database_name(), '"'),
262+
"use_tls"_a = common.GetDisableSslForGenericDataSources() ? "false" : "true");
263+
250264
}
251265
break;
252266
}

ydb/core/fq/libs/control_plane_proxy/utils/utils.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ TString ExtractServiceAccountIdWithConnection(const T& setting) {
3434
case FederatedQuery::ConnectionSetting::kGreenplumCluster: {
3535
return GetServiceAccountId(setting.greenplum_cluster().auth());
3636
}
37+
case FederatedQuery::ConnectionSetting::kMysqlCluster: {
38+
return GetServiceAccountId(setting.greenplum_cluster().auth());
39+
}
3740
// Do not replace with default. Adding a new connection should cause a compilation error
3841
case FederatedQuery::ConnectionSetting::CONNECTION_NOT_SET:
3942
break;

ydb/core/fq/libs/control_plane_storage/request_validators.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,21 @@ NYql::TIssues ValidateConnectionSetting(
8484
}
8585
break;
8686
}
87+
case FederatedQuery::ConnectionSetting::kMysqlCluster: {
88+
const FederatedQuery::GreenplumCluster database = setting.greenplum_cluster();
89+
if (!database.has_auth() || database.auth().identity_case() == FederatedQuery::IamAuth::IDENTITY_NOT_SET) {
90+
issues.AddIssue(MakeErrorIssue(TIssuesIds::BAD_REQUEST, "content.setting.greenplum_database.auth field is not specified"));
91+
}
92+
93+
if (database.auth().identity_case() == FederatedQuery::IamAuth::kCurrentIam && disableCurrentIam) {
94+
issues.AddIssue(MakeErrorIssue(TIssuesIds::BAD_REQUEST, "current iam authorization is disabled"));
95+
}
96+
97+
if (!database.database_id() && !database.database_name()) {
98+
issues.AddIssue(MakeErrorIssue(TIssuesIds::BAD_REQUEST, "content.setting.greenplum_database.{database_id or database_name} field is not specified"));
99+
}
100+
break;
101+
}
87102
case FederatedQuery::ConnectionSetting::kObjectStorage: {
88103
const FederatedQuery::ObjectStorageConnection objectStorage = setting.object_storage();
89104
if (!objectStorage.has_auth() || objectStorage.auth().identity_case() == FederatedQuery::IamAuth::IDENTITY_NOT_SET) {

ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ FederatedQuery::IamAuth::IdentityCase GetIamAuth(const FederatedQuery::Connectio
4141
return setting.postgresql_cluster().auth().identity_case();
4242
case FederatedQuery::ConnectionSetting::kGreenplumCluster:
4343
return setting.greenplum_cluster().auth().identity_case();
44+
case FederatedQuery::ConnectionSetting::kMysqlCluster:
45+
return setting.mysql_cluster().auth().identity_case();
4446
case FederatedQuery::ConnectionSetting::CONNECTION_NOT_SET:
4547
return FederatedQuery::IamAuth::IDENTITY_NOT_SET;
4648
}

ydb/public/api/protos/draft/fq.proto

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,14 @@ message GreenplumCluster {
501501
IamAuth auth = 6;
502502
}
503503

504+
message MySQLCluster {
505+
string database_id = 1 [(Ydb.length).le = 1024];
506+
string database_name = 2 [(Ydb.length).le = 1024];
507+
string login = 3 [(Ydb.length).le = 1024, (Ydb.sensitive) = true];
508+
string password = 4 [(Ydb.length).le = 1024, (Ydb.sensitive) = true];
509+
IamAuth auth = 5;
510+
}
511+
504512
message ConnectionSetting {
505513
enum ConnectionType {
506514
CONNECTION_TYPE_UNSPECIFIED = 0;
@@ -511,6 +519,7 @@ message ConnectionSetting {
511519
MONITORING = 5;
512520
POSTGRESQL_CLUSTER = 6;
513521
GREENPLUM_CLUSTER = 7;
522+
MYSQL_CLUSTER = 8;
514523
}
515524

516525
oneof connection {
@@ -521,6 +530,7 @@ message ConnectionSetting {
521530
Monitoring monitoring = 5;
522531
PostgreSQLCluster postgresql_cluster = 6;
523532
GreenplumCluster greenplum_cluster = 7;
533+
MySQLCluster mysql_cluster = 8;
524534
}
525535
}
526536

0 commit comments

Comments
 (0)