[Improvement](brpc) log error message when AutoReleaseClosure meet brpc error or response… (#32628)

log error message when AutoReleaseClosure meet brpc error or response with error status
This commit is contained in:
Pxl
2024-03-21 20:10:02 +08:00
committed by yiguolei
parent d3bdda6071
commit 6462d913ca

View File

@ -68,6 +68,19 @@ public:
// std::unique_ptr<AutoReleaseClosure> a(b);
// brpc_call(a.release());
template <typename T>
concept HasStatus = requires(T* response) { response->status(); };
template <typename Response>
void process_status(Response* response) {}
template <HasStatus Response>
void process_status(Response* response) {
if (auto status = Status::create(response->status()); !status) {
LOG(WARNING) << "RPC meet error status: " << status;
}
}
template <typename Request, typename Callback>
class AutoReleaseClosure : public google::protobuf::Closure {
using Weak = typename std::shared_ptr<Callback>::weak_type;
@ -91,6 +104,11 @@ public:
if (auto tmp = callback_.lock()) {
tmp->call();
}
if (cntl_->Failed()) {
LOG(WARNING) << "RPC meet failed: " << cntl_->ErrorText();
} else {
process_status<ResponseType>(response_.get());
}
}
// controller has to be the same lifecycle with the closure, because brpc may use