in cpp/source/client/ClientManagerImpl.cpp [1094:1188]
void ClientManagerImpl::changeInvisibleDuration(
const std::string& target_host,
const Metadata& metadata,
const ChangeInvisibleDurationRequest& request,
std::chrono::milliseconds timeout,
const std::function<void(const std::error_code&)>& completion_callback) {
RpcClientSharedPtr client = getRpcClient(target_host);
assert(client);
auto invocation_context = new InvocationContext<ChangeInvisibleDurationResponse>();
invocation_context->task_name = fmt::format("ChangeInvisibleDuration Message[receipt-handle={}] against {}",
request.receipt_handle(), target_host);
invocation_context->remote_address = target_host;
invocation_context->context.set_deadline(std::chrono::system_clock::now() + timeout);
for (const auto& item : metadata) {
invocation_context->context.AddMetadata(item.first, item.second);
}
auto callback = [completion_callback](const InvocationContext<ChangeInvisibleDurationResponse>* invocation_context) {
if (!invocation_context->status.ok()) {
SPDLOG_WARN("Failed to write Nack request to wire. gRPC-code: {}, gRPC-message: {}",
invocation_context->status.error_code(), invocation_context->status.error_message());
std::error_code ec = ErrorCode::RequestTimeout;
completion_callback(ec);
return;
}
std::error_code ec;
auto&& status = invocation_context->response.status();
auto&& peer_address = invocation_context->remote_address;
switch (status.code()) {
case rmq::Code::OK: {
SPDLOG_DEBUG("ChangeInvisibleDuration to {} OK", peer_address);
break;
};
case rmq::Code::ILLEGAL_TOPIC: {
SPDLOG_WARN("IllegalTopic: {}. Host={}", status.message(), peer_address);
ec = ErrorCode::IllegalTopic;
break;
}
case rmq::Code::ILLEGAL_CONSUMER_GROUP: {
SPDLOG_WARN("IllegalConsumerGroup: {}. Host={}", status.message(), peer_address);
ec = ErrorCode::IllegalConsumerGroup;
break;
}
case rmq::Code::UNAUTHORIZED: {
SPDLOG_WARN("Unauthorized: {}, host={}", status.message(), invocation_context->remote_address);
ec = ErrorCode::Unauthorized;
break;
}
case rmq::Code::INVALID_RECEIPT_HANDLE: {
SPDLOG_WARN("InvalidReceiptHandle: {}, host={}", status.message(), invocation_context->remote_address);
ec = ErrorCode::InvalidReceiptHandle;
break;
}
case rmq::Code::CLIENT_ID_REQUIRED: {
SPDLOG_WARN("ClientIdRequired: {}, host={}", status.message(), invocation_context->remote_address);
ec = ErrorCode::InternalClientError;
break;
}
case rmq::Code::FORBIDDEN: {
SPDLOG_WARN("Forbidden: {}, host={}", status.message(), invocation_context->remote_address);
ec = ErrorCode::Forbidden;
break;
}
case rmq::Code::INTERNAL_SERVER_ERROR: {
SPDLOG_WARN("InternalServerError: {}, host={}", status.message(), invocation_context->remote_address);
ec = ErrorCode::InternalServerError;
break;
}
case rmq::Code::TOO_MANY_REQUESTS: {
SPDLOG_WARN("TooManyRequests: {}, host={}", status.message(), invocation_context->remote_address);
ec = ErrorCode::TooManyRequests;
break;
}
default: {
SPDLOG_WARN("NotSupported: Please upgrade to latest SDK, host={}", invocation_context->remote_address);
ec = ErrorCode::NotSupported;
break;
}
}
completion_callback(ec);
};
invocation_context->callback = callback;
client->asyncChangeInvisibleDuration(request, invocation_context);
}