This shows how to override the retry policies for iam_v1::IAMPolicyClient:
auto options =
google::cloud::Options{}
.set<google::cloud::iam_v1::
IAMPolicyConnectionIdempotencyPolicyOption>(
CustomIdempotencyPolicy().clone())
.set<google::cloud::iam_v1::IAMPolicyRetryPolicyOption>(
google::cloud::iam_v1::IAMPolicyLimitedErrorCountRetryPolicy(3)
.clone())
.set<google::cloud::iam_v1::IAMPolicyBackoffPolicyOption>(
google::cloud::ExponentialBackoffPolicy(
/*initial_delay=*/std::chrono::milliseconds(200),
/*maximum_delay=*/std::chrono::seconds(45),
/*scaling=*/2.0)
.clone());
auto connection = google::cloud::iam_v1::MakeIAMPolicyConnection(options);
// c1 and c2 share the same retry policies
auto c1 = google::cloud::iam_v1::IAMPolicyClient(connection);
auto c2 = google::cloud::iam_v1::IAMPolicyClient(connection);
// You can override any of the policies in a new client. This new client
// will share the policies from c1 (or c2) *except* for the retry policy.
auto c3 = google::cloud::iam_v1::IAMPolicyClient(
connection,
google::cloud::Options{}
.set<google::cloud::iam_v1::IAMPolicyRetryPolicyOption>(
google::cloud::iam_v1::IAMPolicyLimitedTimeRetryPolicy(
std::chrono::minutes(5))
.clone()));
// You can also override the policies in a single call:
// c3.SomeRpc(..., google::cloud::Options{}
// .set<google::cloud::iam_v1::IAMPolicyRetryPolicyOption>(
// google::cloud::iam_v1::IAMPolicyLimitedErrorCountRetryPolicy(10).clone()));
Assuming you have created a custom idempotency policy. Such as:
class CustomIdempotencyPolicy
: public google::cloud::iam_v1::IAMPolicyConnectionIdempotencyPolicy {
public:
~CustomIdempotencyPolicy() override = default;
std::unique_ptr<google::cloud::iam_v1::IAMPolicyConnectionIdempotencyPolicy>
clone() const override {
return std::make_unique<CustomIdempotencyPolicy>(*this);
}
// Override inherited functions to define as needed.
};
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[[["\u003cp\u003eThis document details how to override retry policies for \u003ccode\u003eiam_v1::IAMPolicyClient\u003c/code\u003e in various C++ library versions, ranging from version 2.11.0 to the latest release candidate 2.37.0-rc.\u003c/p\u003e\n"],["\u003cp\u003eYou can customize retry policies for \u003ccode\u003eIAMPolicyClient\u003c/code\u003e by using options to set \u003ccode\u003eIAMPolicyConnectionIdempotencyPolicyOption\u003c/code\u003e, \u003ccode\u003eIAMPolicyRetryPolicyOption\u003c/code\u003e, and \u003ccode\u003eIAMPolicyBackoffPolicyOption\u003c/code\u003e, allowing for control over error handling and backoff strategies.\u003c/p\u003e\n"],["\u003cp\u003eClients created with the same connection share the same retry policies, but you can override these policies for individual clients or even single RPC calls, as demonstrated by the creation of client \u003ccode\u003ec3\u003c/code\u003e and the commented code.\u003c/p\u003e\n"],["\u003cp\u003eA \u003ccode\u003eCustomIdempotencyPolicy\u003c/code\u003e class can be implemented to provide custom idempotency behavior, which is set as an option when configuring the retry policies.\u003c/p\u003e\n"],["\u003cp\u003eThe document lists available versions for these retry policies, going from version 2.11.0 to 2.37.0-rc, with each one pointing to its respective location.\u003c/p\u003e\n"]]],[],null,["Version 2.28.0keyboard_arrow_down\n\n- [2.42.0-rc (latest)](/cpp/docs/reference/iam/latest/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.41.0](/cpp/docs/reference/iam/2.41.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.40.0](/cpp/docs/reference/iam/2.40.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.39.0](/cpp/docs/reference/iam/2.39.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.38.0](/cpp/docs/reference/iam/2.38.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.37.0](/cpp/docs/reference/iam/2.37.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.36.0](/cpp/docs/reference/iam/2.36.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.35.0](/cpp/docs/reference/iam/2.35.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.34.0](/cpp/docs/reference/iam/2.34.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.33.0](/cpp/docs/reference/iam/2.33.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.32.0](/cpp/docs/reference/iam/2.32.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.31.0](/cpp/docs/reference/iam/2.31.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.30.0](/cpp/docs/reference/iam/2.30.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.29.0](/cpp/docs/reference/iam/2.29.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.28.0](/cpp/docs/reference/iam/2.28.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.27.0](/cpp/docs/reference/iam/2.27.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.26.0](/cpp/docs/reference/iam/2.26.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.25.1](/cpp/docs/reference/iam/2.25.1/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.24.0](/cpp/docs/reference/iam/2.24.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.23.0](/cpp/docs/reference/iam/2.23.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.22.1](/cpp/docs/reference/iam/2.22.1/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.21.0](/cpp/docs/reference/iam/2.21.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.20.0](/cpp/docs/reference/iam/2.20.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.19.0](/cpp/docs/reference/iam/2.19.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.18.0](/cpp/docs/reference/iam/2.18.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.17.0](/cpp/docs/reference/iam/2.17.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.16.0](/cpp/docs/reference/iam/2.16.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.15.1](/cpp/docs/reference/iam/2.15.1/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.14.0](/cpp/docs/reference/iam/2.14.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.13.0](/cpp/docs/reference/iam/2.13.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.12.0](/cpp/docs/reference/iam/2.12.0/iam_v1_1_1IAMPolicyClient-retry-snippet)\n- [2.11.0](/cpp/docs/reference/iam/2.11.0/iam_v1_1_1IAMPolicyClient-retry-snippet) \n\nOverride iam_v1::IAMPolicyClient Retry Policies\n===============================================\n\nThis shows how to override the retry policies for iam_v1::IAMPolicyClient: \n\n auto options =\n google::cloud::Options{}\n .set\u003cgoogle::cloud::iam_v1::\n IAMPolicyConnectionIdempotencyPolicyOption\u003e(\n CustomIdempotencyPolicy().clone())\n .set\u003cgoogle::cloud::iam_v1::IAMPolicyRetryPolicyOption\u003e(\n google::cloud::iam_v1::IAMPolicyLimitedErrorCountRetryPolicy(3)\n .clone())\n .set\u003cgoogle::cloud::iam_v1::IAMPolicyBackoffPolicyOption\u003e(\n google::cloud::ExponentialBackoffPolicy(\n /*initial_delay=*/std::chrono::milliseconds(200),\n /*maximum_delay=*/std::chrono::seconds(45),\n /*scaling=*/2.0)\n .clone());\n auto connection = google::cloud::iam_v1::MakeIAMPolicyConnection(options);\n\n // c1 and c2 share the same retry policies\n auto c1 = google::cloud::iam_v1::IAMPolicyClient(connection);\n auto c2 = google::cloud::iam_v1::IAMPolicyClient(connection);\n\n // You can override any of the policies in a new client. This new client\n // will share the policies from c1 (or c2) *except* for the retry policy.\n auto c3 = google::cloud::iam_v1::IAMPolicyClient(\n connection,\n google::cloud::Options{}\n .set\u003cgoogle::cloud::iam_v1::IAMPolicyRetryPolicyOption\u003e(\n google::cloud::iam_v1::IAMPolicyLimitedTimeRetryPolicy(\n std::chrono::minutes(5))\n .clone()));\n\n // You can also override the policies in a single call:\n // c3.SomeRpc(..., google::cloud::Options{}\n // .set\u003cgoogle::cloud::iam_v1::IAMPolicyRetryPolicyOption\u003e(\n // google::cloud::iam_v1::IAMPolicyLimitedErrorCountRetryPolicy(10).clone()));\n\nAssuming you have created a custom idempotency policy. Such as: \n\n class CustomIdempotencyPolicy\n : public google::cloud::iam_v1::IAMPolicyConnectionIdempotencyPolicy {\n public:\n ~CustomIdempotencyPolicy() override = default;\n std::unique_ptr\u003cgoogle::cloud::iam_v1::IAMPolicyConnectionIdempotencyPolicy\u003e\n clone() const override {\n return std::make_unique\u003cCustomIdempotencyPolicy\u003e(*this);\n }\n // Override inherited functions to define as needed.\n };"]]