aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkruall <kruall@ydb.tech>2023-08-25 17:26:01 +0300
committerkruall <kruall@ydb.tech>2023-08-25 18:11:29 +0300
commitb218135ca7d62e894ff672c047b97c617fe37513 (patch)
tree021e2eff2e029649d5d94be6f0cbacc3761b870b
parent35eaba5865b71c2058f274a0a126162c7a29b978 (diff)
downloadydb-b218135ca7d62e894ff672c047b97c617fe37513.tar.gz
Forward the error message to grpc response, KIKIMR-18954
-rw-r--r--ydb/core/grpc_services/rpc_keyvalue.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/ydb/core/grpc_services/rpc_keyvalue.cpp b/ydb/core/grpc_services/rpc_keyvalue.cpp
index fa504922bd..054e8f9810 100644
--- a/ydb/core/grpc_services/rpc_keyvalue.cpp
+++ b/ydb/core/grpc_services/rpc_keyvalue.cpp
@@ -742,6 +742,15 @@ public:
using TBase = TRpcOperationRequestActor<TDerived, TRequest>;
using TBase::TBase;
+ template<typename T, typename = void>
+ struct THasMsg: std::false_type
+ {};
+ template<typename T>
+ struct THasMsg<T, std::enable_if_t<std::is_same<decltype(std::declval<T>().msg()), void>::value>>: std::true_type
+ {};
+ template<typename T>
+ static constexpr bool HasMsgV = THasMsg<T>::value;
+
friend class TBaseKeyValueRequest<TKeyValueRequestGrpc<TDerived, TRequest, TResultRecord, TKVRequest>>;
void Bootstrap(const TActorContext& ctx) {
@@ -810,9 +819,14 @@ protected:
}
void Handle(typename TKVRequest::TResponse::TPtr &ev) {
+ auto status = PullStatus(ev->Get()->Record);
+ if constexpr (HasMsgV<decltype(ev->Get()->Record)>) {
+ if (status != Ydb::StatusIds::SUCCESS) {
+ this->Reply(status, ev->Get()->Record.msg(), NKikimrIssues::TIssuesIds::DEFAULT_ERROR, this->ActorContext());
+ }
+ }
TResultRecord result;
CopyProtobuf(ev->Get()->Record, &result);
- auto status = PullStatus(ev->Get()->Record);
this->ReplyWithResult(status, result, TActivationContext::AsActorContext());
}