From c5bb3bad3e04549373dbfd42a604ce66f682462e Mon Sep 17 00:00:00 2001 From: Alexander Verbitsky Date: Fri, 21 May 2021 16:35:54 +0300 Subject: [PATCH] exponential retry for google driver --- .gitignore | 3 +++ src/cloudstorage/drivers/google.py | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/.gitignore b/.gitignore index dce5375..ffd7c19 100644 --- a/.gitignore +++ b/.gitignore @@ -97,6 +97,9 @@ ENV/ # JetBrains .idea +# VS Code +.vscode + # Test API key and secret files settings.ini gcs-service-account.json diff --git a/src/cloudstorage/drivers/google.py b/src/cloudstorage/drivers/google.py index d15bfbd..3b025d5 100644 --- a/src/cloudstorage/drivers/google.py +++ b/src/cloudstorage/drivers/google.py @@ -8,6 +8,9 @@ from http import HTTPStatus from typing import Any, Dict, Iterable, List # noqa: F401 +from urllib3.util.retry import Retry +from requests.adapters import HTTPAdapter + # noinspection PyPackageRequirements from google.auth.exceptions import GoogleAuthError @@ -110,6 +113,13 @@ def __init__(self, key: str = None, **kwargs: Dict) -> None: self._client = storage.Client() + retries_strategy = Retry( + total=5, + backoff_factor=0.1, + status_forcelist=[408, 429]) + http = self._client._http + http.mount('https://', HTTPAdapter(max_retries=retries_strategy)) + def __iter__(self) -> Iterable[Container]: for bucket in self.client.list_buckets(): yield self._make_container(bucket)