diff options
author | hcpp <hcpp@ydb.tech> | 2022-10-06 11:01:20 +0300 |
---|---|---|
committer | hcpp <hcpp@ydb.tech> | 2022-10-06 11:01:20 +0300 |
commit | 4331deb577ea9068218fdd5c88acf3e5023e73dd (patch) | |
tree | 4ef3c156664e990f1da413885a37d14fb2649b0e | |
parent | 5ef5eca3fd81c95fbd0318c0ac3b9282c37f1cf1 (diff) | |
download | ydb-4331deb577ea9068218fdd5c88acf3e5023e73dd.tar.gz |
connection id validation has been added for binding
-rw-r--r-- | ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp index 854c0f66d4e..4d3e5b5e78e 100644 --- a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp +++ b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp @@ -248,6 +248,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvCreateQuery } } + TSet<TString> connectionIds; if (permissions.Check(TPermissions::CONNECTIONS_USE)) { auto connections = GetEntitiesWithVisibilityPriority<YandexQuery::Connection>(resultSets[resultSets.size() - 2], CONNECTION_COLUMN_NAME); for (const auto& [_, connection]: connections) { @@ -255,6 +256,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvCreateQuery continue; } *queryInternal.add_connection() = connection; + connectionIds.insert(connection.meta().id()); } } @@ -270,6 +272,9 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvCreateQuery } *queryInternal.add_binding() = binding; + if (!connectionIds.contains(binding.content().connection_id())) { + ythrow TControlPlaneStorageException(TIssuesIds::BAD_REQUEST) << "Unable to resolve connection for binding " << binding.meta().id() << ", name " << binding.content().name() << ", connection id " << binding.content().connection_id(); + } } } } @@ -902,6 +907,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvModifyQuery } } + TSet<TString> connectionIds; if (permissions.Check(TPermissions::CONNECTIONS_USE)) { auto connections = GetEntitiesWithVisibilityPriority<YandexQuery::Connection>(resultSets[resultSets.size() - 3], CONNECTION_COLUMN_NAME); for (const auto& [_, connection]: connections) { @@ -909,6 +915,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvModifyQuery continue; } *internal.add_connection() = connection; + connectionIds.insert(connection.meta().id()); } } @@ -924,6 +931,9 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvModifyQuery } *internal.add_binding() = binding; + if (!connectionIds.contains(binding.content().connection_id())) { + ythrow TControlPlaneStorageException(TIssuesIds::BAD_REQUEST) << "Unable to resolve connection for binding " << binding.meta().id() << ", name " << binding.content().name() << ", connection id " << binding.content().connection_id(); + } } } } |