diff options
author | galaxycrab <UgnineSirdis@ydb.tech> | 2022-11-17 14:45:07 +0300 |
---|---|---|
committer | galaxycrab <UgnineSirdis@ydb.tech> | 2022-11-17 14:45:07 +0300 |
commit | de958bc48ec6f97a3ea97a990bfa5ddae7ada4a7 (patch) | |
tree | 4c3a3b8e333c809ad173af06e0f871772d069fec | |
parent | 1b9fef91156b4669bafea9d3940662693761779e (diff) | |
download | ydb-de958bc48ec6f97a3ea97a990bfa5ddae7ada4a7.tar.gz |
Fix creation of rate limiter resource in the case when it has been created and then was altered with new quota value
-rw-r--r-- | ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp | 8 | ||||
-rw-r--r-- | ydb/core/yq/libs/rate_limiter/control_plane_service/rate_limiter_control_plane_service.cpp | 17 |
2 files changed, 23 insertions, 2 deletions
diff --git a/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp b/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp index d8f162dad4a..fb93d18df7a 100644 --- a/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp +++ b/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp @@ -557,7 +557,13 @@ public: QuoterResourceCreated = true; SendRequestIfCan(); } else { - ReplyWithError(ev->Get()->Issues); + NYql::TIssue issue("Failed to create rate limiter resource"); + for (const NYql::TIssue& i : ev->Get()->Issues) { + issue.AddSubIssue(MakeIntrusive<NYql::TIssue>(i)); + } + NYql::TIssues issues; + issues.AddIssue(issue); + ReplyWithError(issues); } } diff --git a/ydb/core/yq/libs/rate_limiter/control_plane_service/rate_limiter_control_plane_service.cpp b/ydb/core/yq/libs/rate_limiter/control_plane_service/rate_limiter_control_plane_service.cpp index 1efe152ef79..ef724636fdd 100644 --- a/ydb/core/yq/libs/rate_limiter/control_plane_service/rate_limiter_control_plane_service.cpp +++ b/ydb/core/yq/libs/rate_limiter/control_plane_service/rate_limiter_control_plane_service.cpp @@ -180,7 +180,7 @@ private: void ProcessResponse(TRequest& req, TEvents::TEvSchemaCreated::TPtr& ev) { TEvRateLimiter::TEvCreateResource::TPtr& originalRequest = std::get<TEvRateLimiter::TEvCreateResource::TPtr>(req.OriginalRequest); - if (ev->Get()->Result.IsSuccess() || ev->Get()->Result.GetStatus() == NYdb::EStatus::ALREADY_EXISTS) { + if (IsResourceCreationSuccess(ev)) { NActors::TActivationContext::AsActorContext().Send( originalRequest->Sender, new TEvRateLimiter::TEvCreateResourceResponse( @@ -232,6 +232,21 @@ private: ); } + static bool IsResourceCreationSuccess(TEvents::TEvSchemaCreated::TPtr& ev) { + if (ev->Get()->Result.IsSuccess() || ev->Get()->Result.GetStatus() == NYdb::EStatus::ALREADY_EXISTS) { + return true; + } + // Special case: when resource os already created, but have its quota altered manually + if (ev->Get()->Result.GetStatus() == NYdb::EStatus::BAD_REQUEST) { + for (const NYql::TIssue& i : ev->Get()->Result.GetIssues()) { + if (i.GetMessage().find("Resource already exists") != TString::npos) { + return true; + } + } + } + return false; + } + private: const TString RateLimiterPath; const TYdbConnectionPtr Connection; |