/*
 * Copyright 2021 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.storage;
// [START storage_configure_retries]

import com.google.api.gax.retrying.RetrySettings;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import com.google.cloud.storage.StorageRetryStrategy;
import org.threeten.bp.Duration;

public final class ConfigureRetries {
  public static void main(String[] args) {
    String bucketName = "my-bucket";
    String blobName = "blob/to/delete";
    deleteBlob(bucketName, blobName);
  }

  static void deleteBlob(String bucketName, String blobName) {
    // Update the retry settings
    RetrySettings retrySettings =
        StorageOptions.getDefaultRetrySettings()
            .toBuilder()
            // to set the max number of attempts to 10
            .setMaxAttempts(10)
            // to set the backoff multiplier to 3.0
            .setRetryDelayMultiplier(3.0)
            // to set the max duration of all attempts to 5 minutes
            .setTotalTimeout(Duration.ofMinutes(5))
            .build();

    StorageOptions alwaysRetryStorageOptions =
        StorageOptions.newBuilder()
            // Configure our options so all requests will be retried even if they are
            // non-idempotent.
            .setStorageRetryStrategy(StorageRetryStrategy.getUniformStorageRetryStrategy())
            // provide the previously configured retrySettings
            .setRetrySettings(retrySettings)
            .build();

    // Instantiate a client with our options
    Storage storage = alwaysRetryStorageOptions.getService();

    // Delete the blob
    BlobId blobId = BlobId.of(bucketName, blobName);
    boolean success = storage.delete(blobId);

    System.out.printf(
        "Deletion of Blob %s completed %s.%n", blobId, success ? "successfully" : "unsuccessfully");
  }
}
// [END storage_configure_retries]

@@ -1199,33 +1199,32 @@
  // 
-Update the retry settings
+Customize retry behavior
 %0A   
@@ -1335,36 +1335,33 @@
 %0A            // 
-to s
+S
 et the max numbe
@@ -1379,16 +1379,49 @@
 ts to 10
+ (initial attempt plus 9 retries)
 %0A       
@@ -1456,28 +1456,25 @@
          // 
-to s
+S
 et the backo
@@ -1555,12 +1555,9 @@
  // 
-to s
+S
 et t
@@ -1779,28 +1779,22 @@
 // C
-onfigure our options
+ustomize retry
  so 
@@ -1810,14 +1810,10 @@
 sts 
-will b
+ar
 e re
@@ -1834,31 +1834,16 @@
 they are
-%0A            //
  non-ide
@@ -2105,25 +2105,8 @@
 ient
- with our options
 %0A   

update comments (#1188)