in cpp/source/client/ClientManagerImpl.cpp [1365:1436]
std::error_code ClientManagerImpl::notifyClientTermination(const std::string& target_host, const Metadata& metadata,
const NotifyClientTerminationRequest& request,
std::chrono::milliseconds timeout) {
std::error_code ec;
auto client = getRpcClient(target_host);
if (!client) {
SPDLOG_WARN("Failed to create RpcClient for host={}", target_host);
ec = ErrorCode::RequestTimeout;
return ec;
}
grpc::ClientContext context;
context.set_deadline(std::chrono::system_clock::now() + timeout);
for (const auto& item : metadata) {
context.AddMetadata(item.first, item.second);
}
SPDLOG_DEBUG("NotifyClientTermination request: {}", request.DebugString());
NotifyClientTerminationResponse response;
{
grpc::Status status = client->notifyClientTermination(&context, request, &response);
if (!status.ok()) {
SPDLOG_WARN("NotifyClientTermination failed. gRPC-code={}, gRPC-message={}, host={}", status.error_code(),
status.error_message(), target_host);
ec = ErrorCode::RequestTimeout;
return ec;
}
}
auto&& status = response.status();
switch (status.code()) {
case rmq::Code::OK: {
SPDLOG_DEBUG("NotifyClientTermination OK. host={}", target_host);
break;
}
case rmq::Code::ILLEGAL_CONSUMER_GROUP: {
SPDLOG_ERROR("IllegalConsumerGroup: {}. Host={}", status.message(), target_host);
ec = ErrorCode::IllegalConsumerGroup;
break;
}
case rmq::Code::INTERNAL_SERVER_ERROR: {
SPDLOG_WARN("InternalServerError: Cause={}, host={}", status.message(), target_host);
ec = ErrorCode::InternalServerError;
break;
}
case rmq::Code::UNAUTHORIZED: {
SPDLOG_WARN("Unauthorized due to lack of valid authentication credentials: Cause={}, host={}", status.message(),
target_host);
ec = ErrorCode::Unauthorized;
break;
}
case rmq::Code::FORBIDDEN: {
SPDLOG_WARN("Forbidden due to insufficient permission to the resource: Cause={}, host={}", status.message(),
target_host);
ec = ErrorCode::Forbidden;
break;
}
default: {
SPDLOG_WARN("NotSupported. Please upgrade to latest SDK release. host={}", target_host);
ec = ErrorCode::NotSupported;
break;
}
}
return ec;
}