Skip to content

Commit 3470de7

Browse files
committed
Report correct status on overloaded errors in read table KIKIMR-17778
1 parent 23e1d59 commit 3470de7

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

ydb/core/grpc_services/rpc_read_table.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include "local_rate_limiter.h"
88
#include "service_table.h"
99

10+
#include <ydb/library/yql/core/issue/yql_issue.h>
11+
#include <ydb/library/yql/core/issue/protos/issue_id.pb.h>
1012
#include <ydb/library/yql/public/issue/yql_issue_message.h>
1113
#include <ydb/library/yql/public/issue/yql_issue.h>
1214
#include <ydb/core/base/appdata.h>
@@ -246,6 +248,15 @@ class TReadTableRPC : public TActorBootstrapped<TReadTableRPC> {
246248
NYql::IssueToMessage(issue, tmp);
247249
return ReplyFinishStream(Ydb::StatusIds::SCHEME_ERROR, issueMessage, ctx);
248250
}
251+
case TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardOverloaded: {
252+
const auto req = TEvReadTableRequest::GetProtoRequest(Request_.get());
253+
254+
auto issue = NYql::YqlIssue({}, NYql::TIssuesIds::KIKIMR_OVERLOADED, TStringBuilder()
255+
<< "Table " << req->path() << " is overloaded");
256+
auto tmp = issueMessage.Add();
257+
NYql::IssueToMessage(issue, tmp);
258+
return ReplyFinishStream(Ydb::StatusIds::OVERLOADED, issueMessage, ctx);
259+
}
249260
case TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyNotReady:
250261
case TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardTryLater:
251262
case TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardUnknown:

ydb/core/tx/tx_proxy/read_table_impl.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
#include <ydb/core/scheme/scheme_types_proto.h>
1313
#include <ydb/core/engine/mkql_proto.h>
1414

15+
#include <ydb/library/yql/core/issue/yql_issue.h>
16+
#include <ydb/library/yql/core/issue/protos/issue_id.pb.h>
1517
#include <ydb/library/yql/public/issue/yql_issue_message.h>
1618
#include <ydb/library/yql/public/issue/yql_issue_manager.h>
1719

@@ -854,6 +856,16 @@ class TReadTableWorker : public TActorBootstrapped<TReadTableWorker> {
854856
++TabletsToPrepare;
855857
}
856858

859+
void RaiseShardOverloaded(const NKikimrTxDataShard::TEvProposeTransactionResult& record, ui64 shardId) {
860+
auto issue = NYql::YqlIssue({}, NYql::TIssuesIds::KIKIMR_OVERLOADED, TStringBuilder()
861+
<< "Shard " << shardId << " is overloaded");
862+
for (const auto& err : record.GetError()) {
863+
issue.AddSubIssue(new NYql::TIssue(TStringBuilder()
864+
<< "[" << err.GetKind() << "] " << err.GetReason()));
865+
}
866+
IssueManager.RaiseIssue(std::move(issue));
867+
}
868+
857869
void HandlePrepare(TEvDataShard::TEvProposeTransactionResult::TPtr& ev, const TActorContext& ctx) {
858870
const auto* msg = ev->Get();
859871
const auto& record = msg->Record;
@@ -974,6 +986,7 @@ class TReadTableWorker : public TActorBootstrapped<TReadTableWorker> {
974986
TxProxyMon->TxResultShardOverloaded->Inc();
975987
status = TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardOverloaded;
976988
code = NKikimrIssues::TStatusIds::OVERLOADED;
989+
RaiseShardOverloaded(record, shardId);
977990
break;
978991
case NKikimrTxDataShard::TEvProposeTransactionResult::EXEC_ERROR:
979992
TxProxyMon->TxResultExecError->Inc();
@@ -1940,6 +1953,7 @@ class TReadTableWorker : public TActorBootstrapped<TReadTableWorker> {
19401953

19411954
status = TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ProxyShardOverloaded;
19421955
code = NKikimrIssues::TStatusIds::OVERLOADED;
1956+
RaiseShardOverloaded(record, state.ShardId);
19431957
break;
19441958

19451959
case NKikimrTxDataShard::TEvProposeTransactionResult::EXEC_ERROR:

0 commit comments

Comments
 (0)