aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgalaxycrab <UgnineSirdis@ydb.tech>2022-11-17 14:45:07 +0300
committergalaxycrab <UgnineSirdis@ydb.tech>2022-11-17 14:45:07 +0300
commitde958bc48ec6f97a3ea97a990bfa5ddae7ada4a7 (patch)
tree4c3a3b8e333c809ad173af06e0f871772d069fec
parent1b9fef91156b4669bafea9d3940662693761779e (diff)
downloadydb-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.cpp8
-rw-r--r--ydb/core/yq/libs/rate_limiter/control_plane_service/rate_limiter_control_plane_service.cpp17
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;