aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorva-kuznecov <va-kuznecov@ydb.tech>2023-01-23 14:47:13 +0300
committerva-kuznecov <va-kuznecov@ydb.tech>2023-01-23 14:47:13 +0300
commit0e91c7a392b2e6d46a4dde191a29073dfc8d434b (patch)
treed43d54f1014de09ade862b75a2c060afc1796239
parentab6ff0609c96b8119ee8918ca0216a597febf97a (diff)
downloadydb-0e91c7a392b2e6d46a4dde191a29073dfc8d434b.tar.gz
Reply UNAVAILABLE for some SCAN requests
-rw-r--r--ydb/core/kqp/session_actor/kqp_session_actor.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/ydb/core/kqp/session_actor/kqp_session_actor.cpp b/ydb/core/kqp/session_actor/kqp_session_actor.cpp
index 21124e4ae24..083c3035c1a 100644
--- a/ydb/core/kqp/session_actor/kqp_session_actor.cpp
+++ b/ydb/core/kqp/session_actor/kqp_session_actor.cpp
@@ -836,14 +836,27 @@ public:
Send(snapMgrActorId, ev.release());
}
+ Ydb::StatusIds::StatusCode StatusForSnapshotError(NKikimrIssues::TStatusIds::EStatusCode status) {
+ switch (status) {
+ case NKikimrIssues::TStatusIds::SCHEME_ERROR:
+ return Ydb::StatusIds::SCHEME_ERROR;
+ case NKikimrIssues::TStatusIds::TIMEOUT:
+ return Ydb::StatusIds::TIMEOUT;
+ case NKikimrIssues::TStatusIds::OVERLOADED:
+ return Ydb::StatusIds::OVERLOADED;
+ default:
+ // snapshot is acquired before transactions execution, so we can return UNAVAILABLE here
+ return Ydb::StatusIds::UNAVAILABLE;
+ }
+ }
+
void HandleExecute(TEvKqpSnapshot::TEvCreateSnapshotResponse::TPtr& ev) {
TTimerGuard timer(this);
auto *response = ev->Get();
if (response->Status != NKikimrIssues::TStatusIds::SUCCESS) {
auto& issues = response->Issues;
- LOG_E("failed to acquire snapshot: " << issues.ToString());
- ReplyQueryError(GetYdbStatus(issues), "", MessageFromIssues(issues));
+ ReplyQueryError(StatusForSnapshotError(response->Status), "", MessageFromIssues(issues));
return;
}
QueryState->TxCtx->SnapshotHandle.Snapshot = response->Snapshot;