# Override storagebatchoperations_v1::StorageBatchOperationsClient Retry Policies

3.7.0-rc 3.6.0 (latest) 3.5.0 3.4.0 3.3.0 3.2.0 2.48.0-rc 2.47.1 2.46.0 2.45.0 2.44.0 2.43.0 2.42.0 2.41.0 2.40.0 2.39.0 2.38.0 2.37.0 This shows how to override the retry policies for storagebatchoperations_v1::StorageBatchOperationsClient:

      auto options =
          google::cloud::Options{}
              .set<google::cloud::storagebatchoperations_v1::
                       StorageBatchOperationsConnectionIdempotencyPolicyOption>(
                  CustomIdempotencyPolicy().clone())
              .set<google::cloud::storagebatchoperations_v1::
                       StorageBatchOperationsRetryPolicyOption>(
                  google::cloud::storagebatchoperations_v1::
                      StorageBatchOperationsLimitedErrorCountRetryPolicy(3)
                          .clone())
              .set<google::cloud::storagebatchoperations_v1::
                       StorageBatchOperationsBackoffPolicyOption>(
                  google::cloud::ExponentialBackoffPolicy(
                      /*initial_delay=*/std::chrono::milliseconds(200),
                      /*maximum_delay=*/std::chrono::seconds(45),
                      /*scaling=*/2.0)
                      .clone());
      auto connection = google::cloud::storagebatchoperations_v1::
          MakeStorageBatchOperationsConnection(options);

      // c1 and c2 share the same retry policies
      auto c1 =
          google::cloud::storagebatchoperations_v1::StorageBatchOperationsClient(
              connection);
      auto c2 =
          google::cloud::storagebatchoperations_v1::StorageBatchOperationsClient(
              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::storagebatchoperations_v1::StorageBatchOperationsClient(
              connection, google::cloud::Options{}
                              .set<google::cloud::storagebatchoperations_v1::
                                       StorageBatchOperationsRetryPolicyOption>(
                                  google::cloud::storagebatchoperations_v1::
                                      StorageBatchOperationsLimitedTimeRetryPolicy(
                                          std::chrono::minutes(5))
                                          .clone()));

      // You can also override the policies in a single call:
      // c3.SomeRpc(..., google::cloud::Options{}
      //     .set<google::cloud::storagebatchoperations_v1::StorageBatchOperationsRetryPolicyOption>(
      //       google::cloud::storagebatchoperations_v1::StorageBatchOperationsLimitedErrorCountRetryPolicy(10).clone()));

Assuming you have created a custom idempotency policy. Such as:

    class CustomIdempotencyPolicy
        : public google::cloud::storagebatchoperations_v1::
              StorageBatchOperationsConnectionIdempotencyPolicy {
     public:
      ~CustomIdempotencyPolicy() override = default;
      std::unique_ptr<google::cloud::storagebatchoperations_v1::
                          StorageBatchOperationsConnectionIdempotencyPolicy>
      clone() const override {
        return std::make_unique<CustomIdempotencyPolicy>(*this);
      }
      // Override inherited functions to define as needed.
    };