Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions storage/cloud-client/snippets_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import storage_change_default_storage_class
import storage_change_file_storage_class
import storage_compose_file
import storage_configure_retries
import storage_copy_file
import storage_copy_file_archived_generation
import storage_cors_configuration
Expand Down Expand Up @@ -498,3 +499,13 @@ def test_list_blobs_archived_generation(test_blob, capsys):
)
out, _ = capsys.readouterr()
assert str(test_blob.generation) in out


def test_storage_configure_retries(test_blob, capsys):
storage_configure_retries.configure_retries(test_blob.bucket.name, test_blob.name)

# This simply checks if the retry configurations were set and printed as intended.
out, _ = capsys.readouterr()
assert "The following library method is customized to be retried" in out
assert "_should_retry" in out
assert "initial=1.0, maximum=60.0, multiplier=3.0, deadline=500.0" in out
61 changes: 61 additions & 0 deletions storage/cloud-client/storage_configure_retries.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/usr/bin/env python

# Copyright 2021 Google LLC. All Rights Reserved.
#
# 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.

import sys

"""Sample that configures retries on an operation call.
This sample is used on this page:
https://cloud.google.com/storage/docs/retry-strategy
For more information, see README.md.
"""

# [START storage_configure_retries]
from google.cloud import storage
from google.cloud.storage.retry import DEFAULT_RETRY


def configure_retries(bucket_name, blob_name):
"""Configures retries with customizations."""
# The ID of your GCS bucket
# bucket_name = "your-bucket-name"
# The ID of your GCS object
# blob_name = "your-object-name"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

# Customize retry with a deadline of 500 seconds (default=120 seconds).
modified_retry = DEFAULT_RETRY.with_deadline(500.0)
# Customize retry with a wait time multiplier per iteration of 3.0 (default=2.0).
modified_retry = modified_retry.with_delay(multiplier=3.0)

# blob.delete() uses DEFAULT_RETRY_IF_GENERATION_SPECIFIED by default.
# Override with modified_retry so the function retries even if the generation
# number is not specified.
print(
f"The following library method is customized to be retried according to the following configurations: {modified_retry}"
)

blob.delete(retry=modified_retry)
print("Blob {} deleted with a customized retry strategy.".format(blob_name))


# [END storage_configure_retries]


if __name__ == "__main__":
configure_retries(bucket_name=sys.argv[1], blob_name=sys.argv[2])