3.8.0-rc 3.7.0 (latest) 3.6.0 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 2.36.0 2.35.0 2.34.0 2.33.0 2.32.0 2.31.0 2.30.0 2.29.0 2.28.0 2.27.0 2.26.0 2.25.1 2.24.0 2.23.0 2.22.1 2.21.0 2.20.0 2.19.0 2.18.0 2.17.0 2.16.0 2.15.1 2.14.0 2.13.0 2.12.0 2.11.0 The library automatically retries requests that fail with transient errors, and follows the [recommended practice](https://cloud.google.com/storage/docs/exponential-backoff) to backoff between retries. Application developers can override the default [retry](https://docs.cloud.google.com/cpp/docs/reference/storage/latest/classgoogle_1_1cloud_1_1storage_1_1RetryPolicy) and [backoff](https://docs.cloud.google.com/cpp/docs/reference/storage/latest/namespacegoogle_1_1cloud_1_1storage) policies:

      namespace gcs = ::google::cloud::storage;
      using ::google::cloud::StatusOr;
      [](std::string const& bucket_name, std::string const& object_name,
         std::string contents) {
        // Create a client that only gives up on the third error. The default policy
        // is to retry for several minutes.
        auto client =
            gcs::Client(google::cloud::Options{}.set<gcs::RetryPolicyOption>(
                gcs::LimitedErrorCountRetryPolicy(3).clone()));

        StatusOr<gcs::ObjectMetadata> object_metadata =
            client.InsertObject(bucket_name, object_name, std::move(contents),
                                gcs::IfGenerationMatch(0));
        if (!object_metadata) throw std::move(object_metadata).status();

        std::cout << "The object " << object_metadata->name()
                  << " was created in bucket " << object_metadata->bucket()
                  << "\nFull metadata: " << *object_metadata << "\n";
      }

The default policies are to continue retrying for up to 15 minutes, and to use truncated (at 5 minutes) exponential backoff, doubling the maximum backoff period between retries.

By default the library retries all operations, even those that are not idempotent. Application developers can override the [idempotency policy](https://docs.cloud.google.com/cpp/docs/reference/storage/latest/classgoogle_1_1cloud_1_1storage_1_1IdempotencyPolicy) to follow a more conservative approach:

      namespace gcs = ::google::cloud::storage;
      using ::google::cloud::StatusOr;
      [](std::string const& bucket_name, std::string const& object_name,
         std::string contents) {
        // Create a client that only retries idempotent operations, the default is
        // to retry all operations.
        auto client =
            gcs::Client(google::cloud::Options{}.set<gcs::IdempotencyPolicyOption>(
                gcs::StrictIdempotencyPolicy().clone()));
        StatusOr<gcs::ObjectMetadata> object_metadata =
            client.InsertObject(bucket_name, object_name, std::move(contents),
                                gcs::IfGenerationMatch(0));
        if (!object_metadata) throw std::move(object_metadata).status();

        std::cout << "The object " << object_metadata->name()
                  << " was created in bucket " << object_metadata->bucket()
                  << "\nFull metadata: " << *object_metadata << "\n";
      }

###### See Also

[LimitedTimeRetryPolicy](https://docs.cloud.google.com/cpp/docs/reference/storage/latest/classgoogle_1_1cloud_1_1storage_1_1LimitedTimeRetryPolicy) and [LimitedErrorCountRetryPolicy](https://docs.cloud.google.com/cpp/docs/reference/storage/latest/classgoogle_1_1cloud_1_1storage_1_1LimitedErrorCountRetryPolicy) for alternative retry policies.

###### See Also

[ExponentialBackoffPolicy](https://docs.cloud.google.com/cpp/docs/reference/storage/latest/namespacegoogle_1_1cloud_1_1storage) to configure different parameters for the exponential backoff policy.

###### See Also

[AlwaysRetryIdempotencyPolicy](https://docs.cloud.google.com/cpp/docs/reference/storage/latest/classgoogle_1_1cloud_1_1storage_1_1AlwaysRetryIdempotencyPolicy) and [StrictIdempotencyPolicy](https://docs.cloud.google.com/cpp/docs/reference/storage/latest/classgoogle_1_1cloud_1_1storage_1_1StrictIdempotencyPolicy) for alternative idempotency policies.