diff options
author | va-kuznecov <va-kuznecov@ydb.tech> | 2023-01-23 14:47:13 +0300 |
---|---|---|
committer | va-kuznecov <va-kuznecov@ydb.tech> | 2023-01-23 14:47:13 +0300 |
commit | 0e91c7a392b2e6d46a4dde191a29073dfc8d434b (patch) | |
tree | d43d54f1014de09ade862b75a2c060afc1796239 | |
parent | ab6ff0609c96b8119ee8918ca0216a597febf97a (diff) | |
download | ydb-0e91c7a392b2e6d46a4dde191a29073dfc8d434b.tar.gz |
Reply UNAVAILABLE for some SCAN requests
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_session_actor.cpp | 17 |
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; |