This is an automated email from the ASF dual-hosted git repository. chhsiao pushed a commit to branch 1.7.x in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 80c72a1b895ea1fbca6a977d0599033d27d80c75 Author: Chun-Hung Hsiao <chhs...@mesosphere.io> AuthorDate: Tue Jan 22 22:55:14 2019 -0800 Improved error printing for gRPC statuses. This patch prepends the error message of a `process::grpc::StatusError` with its status code. Review: https://reviews.apache.org/r/69813 --- 3rdparty/libprocess/include/process/grpc.hpp | 14 +++++++- 3rdparty/libprocess/src/grpc.cpp | 53 ++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/3rdparty/libprocess/include/process/grpc.hpp b/3rdparty/libprocess/include/process/grpc.hpp index 28c9cad..f5236c4 100644 --- a/3rdparty/libprocess/include/process/grpc.hpp +++ b/3rdparty/libprocess/include/process/grpc.hpp @@ -15,6 +15,7 @@ #include <chrono> #include <memory> +#include <ostream> #include <string> #include <thread> #include <type_traits> @@ -34,6 +35,7 @@ #include <stout/error.hpp> #include <stout/lambda.hpp> #include <stout/nothing.hpp> +#include <stout/stringify.hpp> #include <stout/try.hpp> @@ -47,6 +49,13 @@ #define GRPC_CLIENT_METHOD(service, rpc) \ (&service::Stub::PrepareAsync##rpc) +namespace grpc { + +std::ostream& operator<<(std::ostream& stream, StatusCode statusCode); + +} // namespace grpc { + + namespace process { namespace grpc { @@ -58,7 +67,10 @@ class StatusError : public Error { public: StatusError(::grpc::Status _status) - : Error(_status.error_message()), status(std::move(_status)) + : Error(stringify(_status.error_code()) + + (_status.error_message().empty() + ? "" : ": " + _status.error_message())), + status(std::move(_status)) { CHECK(!status.ok()); } diff --git a/3rdparty/libprocess/src/grpc.cpp b/3rdparty/libprocess/src/grpc.cpp index 4e4f989..14017c5 100644 --- a/3rdparty/libprocess/src/grpc.cpp +++ b/3rdparty/libprocess/src/grpc.cpp @@ -16,6 +16,59 @@ #include <process/id.hpp> #include <process/process.hpp> +#include <stout/unreachable.hpp> + +using std::ostream; + +namespace grpc { + +ostream& operator<<(ostream& stream, StatusCode statusCode) +{ + switch (statusCode) { + case OK: + return stream << "OK"; + case CANCELLED: + return stream << "CANCELLED"; + case UNKNOWN: + return stream << "UNKNOWN"; + case INVALID_ARGUMENT: + return stream << "INVALID_ARGUMENT"; + case DEADLINE_EXCEEDED: + return stream << "DEADLINE_EXCEEDED"; + case NOT_FOUND: + return stream << "NOT_FOUND"; + case ALREADY_EXISTS: + return stream << "ALREADY_EXISTS"; + case PERMISSION_DENIED: + return stream << "PERMISSION_DENIED"; + case UNAUTHENTICATED: + return stream << "UNAUTHENTICATED"; + case RESOURCE_EXHAUSTED: + return stream << "RESOURCE_EXHAUSTED"; + case FAILED_PRECONDITION: + return stream << "FAILED_PRECONDITION"; + case ABORTED: + return stream << "ABORTED"; + case OUT_OF_RANGE: + return stream << "OUT_OF_RANGE"; + case UNIMPLEMENTED: + return stream << "UNIMPLEMENTED"; + case INTERNAL: + return stream << "INTERNAL"; + case UNAVAILABLE: + return stream << "UNAVAILABLE"; + case DATA_LOSS: + return stream << "DATA_LOSS"; + case DO_NOT_USE: + return stream << "DO_NOT_USE"; + } + + UNREACHABLE(); +} + +} // namespace grpc { + + namespace process { namespace grpc { namespace client {