From 704967a1a66ee3065748a2ffef9eaa097978d6ed Mon Sep 17 00:00:00 2001 From: Grigoriy Pisarenko Date: Mon, 26 Aug 2024 07:09:34 +0000 Subject: [PATCH 1/3] Fixed database checking --- .../workload_service/actors/scheme_actors.cpp | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/ydb/core/kqp/workload_service/actors/scheme_actors.cpp b/ydb/core/kqp/workload_service/actors/scheme_actors.cpp index 17ca8a48fedd..296db325e367 100644 --- a/ydb/core/kqp/workload_service/actors/scheme_actors.cpp +++ b/ydb/core/kqp/workload_service/actors/scheme_actors.cpp @@ -483,12 +483,12 @@ class TDatabaseFetcherActor : public TSchemeActorBase { } return; case EStatus::Ok: + if (!IsSubDomainPath(result)) { + Reply(Ydb::StatusIds::UNSUPPORTED, TStringBuilder() << "Invalid database path " << Database << ", expected domain or subdomain path"); + return; + } if (result.DomainInfo) { Serverless = result.DomainInfo->IsServerless(); - if (result.Self->Info.GetPathId() != result.DomainInfo->DomainKey.LocalPathId) { - Reply(Ydb::StatusIds::UNSUPPORTED, TStringBuilder() << "Invalid database " << Database << ", domain path id is different"); - return; - } } Reply(Ydb::StatusIds::SUCCESS); return; @@ -541,6 +541,18 @@ class TDatabaseFetcherActor : public TSchemeActorBase { PassAway(); } + static bool IsSubDomainPath(const NSchemeCache::TSchemeCacheNavigate::TEntry& entry) { + switch (entry.Kind) { + case NSchemeCache::TSchemeCacheNavigate::EKind::KindSubdomain: + case NSchemeCache::TSchemeCacheNavigate::EKind::KindExtSubdomain: + return true; + case NSchemeCache::TSchemeCacheNavigate::EKind::KindPath: + return entry.Self->Info.GetPathId() == NSchemeShard::RootPathId; + default: + return false; + } + } + private: const TActorId ReplyActorId; const TString Database; From 9cd16e8018e2417a778272a4af6a8b809aed1557 Mon Sep 17 00:00:00 2001 From: Grigoriy Pisarenko Date: Mon, 26 Aug 2024 08:54:03 +0000 Subject: [PATCH 2/3] Fixed issue text --- ydb/core/kqp/workload_service/actors/scheme_actors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/core/kqp/workload_service/actors/scheme_actors.cpp b/ydb/core/kqp/workload_service/actors/scheme_actors.cpp index 296db325e367..0ce0ba317743 100644 --- a/ydb/core/kqp/workload_service/actors/scheme_actors.cpp +++ b/ydb/core/kqp/workload_service/actors/scheme_actors.cpp @@ -484,7 +484,7 @@ class TDatabaseFetcherActor : public TSchemeActorBase { return; case EStatus::Ok: if (!IsSubDomainPath(result)) { - Reply(Ydb::StatusIds::UNSUPPORTED, TStringBuilder() << "Invalid database path " << Database << ", expected domain or subdomain path"); + Reply(Ydb::StatusIds::UNSUPPORTED, TStringBuilder() << "Invalid database path " << Database << ", please check path correctness"); return; } if (result.DomainInfo) { From f0b060ab252916a1596d1eb548f0ee7670b91d48 Mon Sep 17 00:00:00 2001 From: Grigoriy Pisarenko Date: Mon, 26 Aug 2024 09:53:31 +0000 Subject: [PATCH 3/3] Fixed typo --- ydb/core/kqp/workload_service/actors/scheme_actors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/core/kqp/workload_service/actors/scheme_actors.cpp b/ydb/core/kqp/workload_service/actors/scheme_actors.cpp index 0ce0ba317743..781d9f4a6eca 100644 --- a/ydb/core/kqp/workload_service/actors/scheme_actors.cpp +++ b/ydb/core/kqp/workload_service/actors/scheme_actors.cpp @@ -484,7 +484,7 @@ class TDatabaseFetcherActor : public TSchemeActorBase { return; case EStatus::Ok: if (!IsSubDomainPath(result)) { - Reply(Ydb::StatusIds::UNSUPPORTED, TStringBuilder() << "Invalid database path " << Database << ", please check path correctness"); + Reply(Ydb::StatusIds::UNSUPPORTED, TStringBuilder() << "Invalid database path " << Database << ", please check the correctness of the path"); return; } if (result.DomainInfo) {