diff options
author | kruall <kruall@ydb.tech> | 2023-08-25 17:26:01 +0300 |
---|---|---|
committer | kruall <kruall@ydb.tech> | 2023-08-25 18:11:29 +0300 |
commit | b218135ca7d62e894ff672c047b97c617fe37513 (patch) | |
tree | 021e2eff2e029649d5d94be6f0cbacc3761b870b | |
parent | 35eaba5865b71c2058f274a0a126162c7a29b978 (diff) | |
download | ydb-b218135ca7d62e894ff672c047b97c617fe37513.tar.gz |
Forward the error message to grpc response, KIKIMR-18954
-rw-r--r-- | ydb/core/grpc_services/rpc_keyvalue.cpp | 16 |
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()); } |