in src/kudu/common/wire_protocol.cc [72:134]
void StatusToPB(const Status& status, AppStatusPB* pb) {
pb->Clear();
bool is_unknown = false;
if (status.ok()) {
pb->set_code(AppStatusPB::OK);
// OK statuses don't have any message or posix code.
return;
} else if (status.IsNotFound()) {
pb->set_code(AppStatusPB::NOT_FOUND);
} else if (status.IsCorruption()) {
pb->set_code(AppStatusPB::CORRUPTION);
} else if (status.IsNotSupported()) {
pb->set_code(AppStatusPB::NOT_SUPPORTED);
} else if (status.IsInvalidArgument()) {
pb->set_code(AppStatusPB::INVALID_ARGUMENT);
} else if (status.IsIOError()) {
pb->set_code(AppStatusPB::IO_ERROR);
} else if (status.IsAlreadyPresent()) {
pb->set_code(AppStatusPB::ALREADY_PRESENT);
} else if (status.IsRuntimeError()) {
pb->set_code(AppStatusPB::RUNTIME_ERROR);
} else if (status.IsNetworkError()) {
pb->set_code(AppStatusPB::NETWORK_ERROR);
} else if (status.IsIllegalState()) {
pb->set_code(AppStatusPB::ILLEGAL_STATE);
} else if (status.IsNotAuthorized()) {
pb->set_code(AppStatusPB::NOT_AUTHORIZED);
} else if (status.IsAborted()) {
pb->set_code(AppStatusPB::ABORTED);
} else if (status.IsRemoteError()) {
pb->set_code(AppStatusPB::REMOTE_ERROR);
} else if (status.IsServiceUnavailable()) {
pb->set_code(AppStatusPB::SERVICE_UNAVAILABLE);
} else if (status.IsTimedOut()) {
pb->set_code(AppStatusPB::TIMED_OUT);
} else if (status.IsUninitialized()) {
pb->set_code(AppStatusPB::UNINITIALIZED);
} else if (status.IsConfigurationError()) {
pb->set_code(AppStatusPB::CONFIGURATION_ERROR);
} else if (status.IsIncomplete()) {
pb->set_code(AppStatusPB::INCOMPLETE);
} else if (status.IsEndOfFile()) {
pb->set_code(AppStatusPB::END_OF_FILE);
} else {
LOG(WARNING) << "Unknown error code translation from internal error "
<< status.ToString() << ": sending UNKNOWN_ERROR";
pb->set_code(AppStatusPB::UNKNOWN_ERROR);
is_unknown = true;
}
if (is_unknown) {
// For unknown status codes, include the original stringified error
// code.
pb->set_message(status.CodeAsString() + ": " +
status.message().ToString());
} else {
// Otherwise, just encode the message itself, since the other end
// will reconstruct the other parts of the ToString() response.
pb->set_message(status.message().ToString());
}
if (status.posix_code() != -1) {
pb->set_posix_code(status.posix_code());
}
}