This is an automated email from the ASF dual-hosted git repository. lizhanhui pushed a commit to branch cpp in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git
commit 5bc970f417148d937c2836a6d944c21da508e9d0 Author: Li Zhanhui <[email protected]> AuthorDate: Thu Jun 30 15:10:57 2022 +0800 Complete error handling of QueryRoute --- cpp/api/rocketmq/ErrorCode.h | 95 +++++++++++++++++----- cpp/src/main/cpp/base/ErrorCategory.cpp | 9 +- cpp/src/main/cpp/client/ClientManagerImpl.cpp | 52 +++++++++--- .../main/cpp/client/ReceiveMessageStreamReader.cpp | 2 +- 4 files changed, 120 insertions(+), 38 deletions(-) diff --git a/cpp/api/rocketmq/ErrorCode.h b/cpp/api/rocketmq/ErrorCode.h index 5068c83..14ec504 100644 --- a/cpp/api/rocketmq/ErrorCode.h +++ b/cpp/api/rocketmq/ErrorCode.h @@ -33,6 +33,11 @@ enum class ErrorCode : int { */ IllegalState = 1, + /** + * @brief To publish FIFO messages, only synchronous API is supported. + */ + BadRequestAsyncPubFifoMessage = 10001, + /** * @brief Broker has processed the request but is not going to return any content. */ @@ -45,53 +50,92 @@ enum class ErrorCode : int { BadConfiguration = 300, /** - * @brief The server cannot process the request due to apprent client-side + * @brief Generic code, representing multiple return results. + * + */ + MultipleResults = 30000, + + /** + * @brief The server cannot process the request due to apparent client-side * error. For example, topic contains invalid character or is excessively * long. * */ - BadRequest = 400, + BadRequest = 40000, /** - * @brief To publish FIFO messages, only synchronous API is supported. + * @brief The access point is illegal + * + */ + IllegalAccessPoint = 40001, + + IllegalTopic = 40002, + IllegalConsumerGroup = 40003, + IllegalMessageTag = 40004, + IllegalMessageKey = 40005, + IllegalMessageGroup = 40006, + IllegalMessageProperty = 40007, + InvalidTransactionId = 40008, + IllegalMessageId = 40009, + IllegalFilterExpression = 40010, + InvalidReceiptHandle = 40011, + + /** + * @brief Message property conflicts with its type. */ - BadRequestAsyncPubFifoMessage = 40001, + MessagePropertyConflictWithType = 40012, + + // Client type is not recognized by server + UnsupportedClientType = 40013, + + // Received message is corrupted, generally failing to pass integrity checksum validation. + MessageCorrupted = 40014, + + // Request is rejected due to missing of x-mq-client-id HTTP header in the metadata frame. + ClientIdRequired = 40015, /** * @brief Authentication failed. Possibly caused by invalid credentials. * */ - Unauthorized = 401, + Unauthorized = 40100, /** * @brief Credentials are understood by server but authenticated user does not * have privilege to perform the requested action. * */ - Forbidden = 403, + Forbidden = 40300, /** * @brief Topic not found, which should be created through console or * administration API before hand. * */ - NotFound = 404, + NotFound = 40400, + + MessageNotFound = 40401, - TopicNotFound = 404001, + TopicNotFound = 404002, - GroupNotFound = 404002, + ConsumerGroupNotFound = 404003, /** * @brief Timeout when connecting, reading from or writing to brokers. * */ - RequestTimeout = 408, + RequestTimeout = 40800, /** * @brief Message body is too large. * */ - PayloadTooLarge = 413, + PayloadTooLarge = 41300, + + /** + * @brief Message body size exceeds limited allowed by server. + */ + MessageBodyTooLarge = 41301, /** * @brief When trying to perform an action whose dependent procedure state is @@ -100,14 +144,14 @@ enum class ErrorCode : int { * 2. Commit/Rollback a transactional message that does not exist; * 3. Commit an offset which is greater than maximum of partition; */ - PreconditionRequired = 428, + PreconditionRequired = 42800, /** * @brief Quota exchausted. The user has sent too many requests in a given * amount of time. * */ - TooManyRequest = 429, + TooManyRequest = 42900, /** * @brief The server is unwilling to process the request because either an @@ -115,62 +159,69 @@ enum class ErrorCode : int { * large * */ - HeaderFieldsTooLarge = 431, + HeaderFieldsTooLarge = 43100, + + // Message properties total size exceeds the threshold. + MessagePropertiesTooLarge = 43101, /** * @brief A server operator has received a legal demand to deny access to a * resource or to a set of resources that includes the requested resource. * */ - UnavailableForLegalReasons = 451, + UnavailableForLegalReasons = 45100, /** * @brief Server side interval error * */ - InternalServerError = 500, + InternalServerError = 50000, /** * @brief The server either does not recognize the request method, or it lacks * the ability to fulfil the request. * */ - NotImplemented = 501, + NotImplemented = 50100, /** * @brief The server was acting as a gateway or proxy and received an invalid * response from the upstream server. * */ - BadGateway = 502, + BadGateway = 50200, /** * @brief The server cannot handle the request (because it is overloaded or * down for maintenance). Generally, this is a temporary state. * */ - ServiceUnavailable = 503, + ServiceUnavailable = 50300, /** * @brief The server was acting as a gateway or proxy and did not receive a * timely response from the upstream server. * */ - GatewayTimeout = 504, + GatewayTimeout = 50400, /** * @brief The server does not support the protocol version used in the * request. * */ - ProtocolVersionNotSupported = 505, + NotSupported = 50500, + + ProtocolUnsupported = 50501, + + VerifyFifoMessageUnsupported = 50502, /** * @brief The server is unable to store the representation needed to complete * the request. * */ - InsufficientStorage = 507, + InsufficientStorage = 50700, }; std::error_code make_error_code(ErrorCode code); diff --git a/cpp/src/main/cpp/base/ErrorCategory.cpp b/cpp/src/main/cpp/base/ErrorCategory.cpp index 4fe2ea0..4f1b290 100644 --- a/cpp/src/main/cpp/base/ErrorCategory.cpp +++ b/cpp/src/main/cpp/base/ErrorCategory.cpp @@ -53,7 +53,7 @@ std::string ErrorCategory::message(int code) const { case ErrorCode::TopicNotFound: return "Topic is not found. Verify the request topic has already been created through console or management API"; - case ErrorCode::GroupNotFound: + case ErrorCode::ConsumerGroupNotFound: return "Group is not found. Verify the request group has already been created through console or management API"; case ErrorCode::RequestTimeout: @@ -100,17 +100,16 @@ std::string ErrorCategory::message(int code) const { "a timely response from the upstream " "server."; - case ErrorCode::ProtocolVersionNotSupported: + case ErrorCode::ProtocolUnsupported: return "The server does not support the protocol version used in the " "request."; case ErrorCode::InsufficientStorage: return "The server is unable to store the representation needed to " "complete the request."; - - default: - return "Not-Implemented"; } + + return ""; } ROCKETMQ_NAMESPACE_END \ No newline at end of file diff --git a/cpp/src/main/cpp/client/ClientManagerImpl.cpp b/cpp/src/main/cpp/client/ClientManagerImpl.cpp index 0c6e155..05a670b 100644 --- a/cpp/src/main/cpp/client/ClientManagerImpl.cpp +++ b/cpp/src/main/cpp/client/ClientManagerImpl.cpp @@ -478,32 +478,64 @@ void ClientManagerImpl::resolveRoute(const std::string& target_host, const Metad } auto ptr = std::make_shared<TopicRouteData>(std::move(message_queues)); cb(ec, ptr); - } break; + break; + } + + case rmq::Code::ILLEGAL_ACCESS_POINT: { + SPDLOG_WARN("IllegalAccessPoint: {}. Host={}", status.message(), invocation_context->remote_address); + ec = ErrorCode::IllegalAccessPoint; + cb(ec, nullptr); + break; + } + case rmq::Code::UNAUTHORIZED: { SPDLOG_WARN("Unauthorized: {}. Host={}", status.message(), invocation_context->remote_address); ec = ErrorCode::Unauthorized; cb(ec, nullptr); - } break; - case rmq::Code::FORBIDDEN: { - SPDLOG_WARN("Forbidden: {}. Host={}", status.message(), invocation_context->remote_address); - ec = ErrorCode::Forbidden; - cb(ec, nullptr); - } break; + break; + } + case rmq::Code::TOPIC_NOT_FOUND: { SPDLOG_WARN("TopicNotFound: {}. Host={}", status.message(), invocation_context->remote_address); ec = ErrorCode::NotFound; cb(ec, nullptr); - } break; + break; + } + + case rmq::Code::TOO_MANY_REQUESTS: { + SPDLOG_WARN("TooManyRequest: {}. Host={}", status.message(), invocation_context->remote_address); + ec = ErrorCode::TooManyRequest; + cb(ec, nullptr); + break; + } + + case rmq::Code::CLIENT_ID_REQUIRED: { + SPDLOG_ERROR("ClientIdRequired: {}. Host={}", status.message(), invocation_context->remote_address); + ec = ErrorCode::ClientIdRequired; + cb(ec, nullptr); + break; + } + case rmq::Code::INTERNAL_SERVER_ERROR: { SPDLOG_WARN("InternalServerError: {}. Host={}", status.message(), invocation_context->remote_address); ec = ErrorCode::InternalServerError; cb(ec, nullptr); - } break; + break; + } + + case rmq::Code::PROXY_TIMEOUT: { + SPDLOG_WARN("GatewayTimeout: {}. Host={}", status.message(), invocation_context->remote_address); + ec = ErrorCode::GatewayTimeout; + cb(ec, nullptr); + break; + } + default: { SPDLOG_WARN("NotImplement: Please upgrade to latest SDK release. Host={}", invocation_context->remote_address); ec = ErrorCode::NotImplemented; cb(ec, nullptr); - } break; + break; + } } }; invocation_context->callback = callback; diff --git a/cpp/src/main/cpp/client/ReceiveMessageStreamReader.cpp b/cpp/src/main/cpp/client/ReceiveMessageStreamReader.cpp index 223c879..4667de4 100644 --- a/cpp/src/main/cpp/client/ReceiveMessageStreamReader.cpp +++ b/cpp/src/main/cpp/client/ReceiveMessageStreamReader.cpp @@ -69,7 +69,7 @@ void ReceiveMessageStreamReader::OnReadDone(bool ok) { } case rmq::Code::CONSUMER_GROUP_NOT_FOUND: { - ec_ = ErrorCode::GroupNotFound; + ec_ = ErrorCode::ConsumerGroupNotFound; break; } case rmq::Code::TOO_MANY_REQUESTS: {
