我从这里使用 google-cloud-cpp SDK ,我正在尝试测试一个不正确的端点场景,根据我在传入不正确的端点 url 时设置的策略,我期望在 100 毫秒内出现错误。但是,我的测试却挂了很长时间。对于这种特殊情况,我只需要为 ListObjects 案例覆盖现有 gcs::Client 的策略,并希望重新使用我已经创建的客户端。我写了一个小程序来模拟我在代码库中的实际问题的行为。我不确定为什么LimitedTimeRetryPolicy的重试策略没有转发到我创建的新客户端?感谢任何帮助和/或示例。
using namespace google::cloud::storage;
using ::google::cloud::StatusOr;
// Ex: ./wrongEndpoint
int main(int argc, char* argv[]) {
auto options = ClientOptions::CreateDefaultClientOptions();
options.value().set_enable_http_tracing(true);
options.value().set_enable_raw_client_tracing(true);
options.value().set_endpoint("https://somegarbage.com");
options.value().set_download_stall_timeout(std::chrono::seconds(1));
// Original Client in the codebase
Client clientX(*options);
// Creating new client for ListObjects from the raw_client with a retry policy
std::shared_ptr<internal::RawClient> Rclient = clientX.raw_client();
Client client = Client(Rclient, LimitedTimeRetryPolicy(std::chrono::milliseconds(100)));
try{
for (auto&& object_metadata : client.ListObjects("march30")) {
if (!object_metadata) {
throw std::runtime_error(object_metadata.status().message());
}
std::cout << "bucket_name=" << object_metadata->bucket()
<< ", object_name=" << object_metadata->name() << "\n";
}
} catch(std::exception &ex) {
std::cout << ex.what() << "\n";
}
}