summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksei Borzenkov <[email protected]>2024-01-12 18:19:10 +0300
committerGitHub <[email protected]>2024-01-12 16:19:10 +0100
commit78e14b4863a7ec8216b3495777fb56a4aa4941bc (patch)
tree4a5c530bf0c36594eec3fcffd6bc8ee9df274cbc
parent72a5861be06a91dc710b0b141eccbfdec4b2902a (diff)
Report correct status on overloaded errors in read table KIKIMR-17778 (#946)
-rw-r--r--ydb/core/grpc_services/rpc_read_table.cpp11
-rw-r--r--ydb/core/tx/tx_proxy/read_table_impl.cpp14
2 files changed, 25 insertions, 0 deletions
diff --git a/ydb/core/grpc_services/rpc_read_table.cpp b/ydb/core/grpc_services/rpc_read_table.cpp
index baeb439ed61..908ce028e4d 100644
--- a/ydb/core/grpc_services/rpc_read_table.cpp
+++ b/ydb/core/grpc_services/rpc_read_table.cpp
@@ -7,6 +7,8 @@
#include "local_rate_limiter.h"
#include "service_table.h"
+#include <ydb/library/yql/core/issue/yql_issue.h>
+#include <ydb/library/yql/core/issue/protos/issue_id.pb.h>
#include <ydb/library/yql/public/issue/yql_issue_message.h>
#include <ydb/library/yql/public/issue/yql_issue.h>
#include <ydb/core/base/appdata.h>
@@ -246,6 +248,15 @@ private:
NYql::IssueToMessage(issue, tmp);
return ReplyFinishStream(Ydb::StatusIds::SCHEME_ERROR, issueMessage, ctx);
}
+ case TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardOverloaded: {
+ const auto req = TEvReadTableRequest::GetProtoRequest(Request_.get());
+
+ auto issue = NYql::YqlIssue({}, NYql::TIssuesIds::KIKIMR_OVERLOADED, TStringBuilder()
+ << "Table " << req->path() << " is overloaded");
+ auto tmp = issueMessage.Add();
+ NYql::IssueToMessage(issue, tmp);
+ return ReplyFinishStream(Ydb::StatusIds::OVERLOADED, issueMessage, ctx);
+ }
case TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyNotReady:
case TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardTryLater:
case TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardUnknown:
diff --git a/ydb/core/tx/tx_proxy/read_table_impl.cpp b/ydb/core/tx/tx_proxy/read_table_impl.cpp
index a30ec40b7f9..f8d9dcb5603 100644
--- a/ydb/core/tx/tx_proxy/read_table_impl.cpp
+++ b/ydb/core/tx/tx_proxy/read_table_impl.cpp
@@ -12,6 +12,8 @@
#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/engine/mkql_proto.h>
+#include <ydb/library/yql/core/issue/yql_issue.h>
+#include <ydb/library/yql/core/issue/protos/issue_id.pb.h>
#include <ydb/library/yql/public/issue/yql_issue_message.h>
#include <ydb/library/yql/public/issue/yql_issue_manager.h>
@@ -854,6 +856,16 @@ private:
++TabletsToPrepare;
}
+ void RaiseShardOverloaded(const NKikimrTxDataShard::TEvProposeTransactionResult& record, ui64 shardId) {
+ auto issue = NYql::YqlIssue({}, NYql::TIssuesIds::KIKIMR_OVERLOADED, TStringBuilder()
+ << "Shard " << shardId << " is overloaded");
+ for (const auto& err : record.GetError()) {
+ issue.AddSubIssue(new NYql::TIssue(TStringBuilder()
+ << "[" << err.GetKind() << "] " << err.GetReason()));
+ }
+ IssueManager.RaiseIssue(std::move(issue));
+ }
+
void HandlePrepare(TEvDataShard::TEvProposeTransactionResult::TPtr& ev, const TActorContext& ctx) {
const auto* msg = ev->Get();
const auto& record = msg->Record;
@@ -974,6 +986,7 @@ private:
TxProxyMon->TxResultShardOverloaded->Inc();
status = TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardOverloaded;
code = NKikimrIssues::TStatusIds::OVERLOADED;
+ RaiseShardOverloaded(record, shardId);
break;
case NKikimrTxDataShard::TEvProposeTransactionResult::EXEC_ERROR:
TxProxyMon->TxResultExecError->Inc();
@@ -1940,6 +1953,7 @@ private:
status = TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardOverloaded;
code = NKikimrIssues::TStatusIds::OVERLOADED;
+ RaiseShardOverloaded(record, state.ShardId);
break;
case NKikimrTxDataShard::TEvProposeTransactionResult::EXEC_ERROR: