diff --git a/medusa-example.ini b/medusa-example.ini index 21e020a9..42e9dc76 100644 --- a/medusa-example.ini +++ b/medusa-example.ini @@ -131,7 +131,7 @@ use_sudo_for_restore = True ;aws_cli_path = ; Read timeout in seconds for the storage provider. -;read_timeout = 60 +;read_timeout = None [monitoring] ;monitoring_provider = diff --git a/medusa/config.py b/medusa/config.py index 90ab3533..b490a126 100644 --- a/medusa/config.py +++ b/medusa/config.py @@ -117,7 +117,6 @@ def _build_default_config(): 'region': 'default', 'backup_grace_period_in_days': 10, 'use_sudo_for_restore': 'True', - 'read_timeout': 60 } config['logging'] = { diff --git a/medusa/storage/azure_storage.py b/medusa/storage/azure_storage.py index 67d4778a..ef7cdca7 100644 --- a/medusa/storage/azure_storage.py +++ b/medusa/storage/azure_storage.py @@ -56,7 +56,7 @@ def __init__(self, config): logging.getLogger('azure.core.pipeline.policies.http_logging_policy').setLevel(logging.WARNING) logging.getLogger('chardet.universaldetector').setLevel(logging.WARNING) - self.read_timeout = int(config.read_timeout) + self.read_timeout = int(config.read_timeout) if 'read_timeout' in dir(config) else None super().__init__(config) diff --git a/medusa/storage/google_storage.py b/medusa/storage/google_storage.py index 35e7bb15..e036b701 100644 --- a/medusa/storage/google_storage.py +++ b/medusa/storage/google_storage.py @@ -49,7 +49,7 @@ def __init__(self, config): logging.getLogger('gcloud.aio.storage.storage').setLevel(logging.WARNING) - self.read_timeout = int(config.read_timeout) + self.read_timeout = int(config.read_timeout) if 'read_timeout' in dir(config) else None super().__init__(config) @@ -158,7 +158,7 @@ async def _download_blob(self, src: str, dest: str): stream = await self.gcs_storage.download_stream( bucket=self.bucket_name, object_name=object_key, - timeout=self.read_timeout if self.read_timeout is not None else -1, + timeout=self.read_timeout, ) Path(file_path).parent.mkdir(parents=True, exist_ok=True) with open(file_path, 'wb') as f: @@ -243,7 +243,7 @@ async def _read_blob_as_bytes(self, blob: AbstractBlob) -> bytes: bucket=self.bucket_name, object_name=blob.name, session=self.session, - timeout=self.read_timeout if self.read_timeout is not None else -1, + timeout=self.read_timeout, ) return content diff --git a/medusa/storage/s3_base_storage.py b/medusa/storage/s3_base_storage.py index 5733d5b9..a4288adf 100644 --- a/medusa/storage/s3_base_storage.py +++ b/medusa/storage/s3_base_storage.py @@ -119,6 +119,8 @@ def __init__(self, config): self.executor = concurrent.futures.ThreadPoolExecutor(int(config.concurrent_transfers)) + self.read_timeout = int(config.read_timeout) if 'read_timeout' in dir(config) else None + super().__init__(config) def connect(self): @@ -137,7 +139,7 @@ def connect(self): signature_version='v4', tcp_keepalive=True, max_pool_connections=max_pool_size, - read_timeout=int(self.config.read_timeout), + read_timeout=self.read_timeout, ) if self.credentials.access_key_id is not None: self.s3_client = boto3.client( diff --git a/tests/resources/config/medusa-azure_blobs.ini b/tests/resources/config/medusa-azure_blobs.ini index e7aebcc0..a999cdaf 100644 --- a/tests/resources/config/medusa-azure_blobs.ini +++ b/tests/resources/config/medusa-azure_blobs.ini @@ -16,6 +16,7 @@ multi_part_upload_threshold = 1024 concurrent_transfers = 4 backup_grace_period_in_days = 0 max_backup_count = 1 +read_timeout = None [monitoring] monitoring_provider = local diff --git a/tests/resources/config/medusa-s3_us_west_oregon.ini b/tests/resources/config/medusa-s3_us_west_oregon.ini index 5e1502d9..ffd50dac 100644 --- a/tests/resources/config/medusa-s3_us_west_oregon.ini +++ b/tests/resources/config/medusa-s3_us_west_oregon.ini @@ -17,6 +17,7 @@ concurrent_transfers = 16 backup_grace_period_in_days = 0 max_backup_count = 1 region = us-west-2 +read_timeout = 60 [monitoring] monitoring_provider = local diff --git a/tests/storage/abstract_storage_test.py b/tests/storage/abstract_storage_test.py index 123760eb..ac5d223b 100644 --- a/tests/storage/abstract_storage_test.py +++ b/tests/storage/abstract_storage_test.py @@ -26,6 +26,7 @@ class AttributeDict(dict): __slots__ = () __getattr__ = dict.__getitem__ __setattr__ = dict.__setitem__ + __dict__ = dict.__dict__ class TestAbstractStorage(AbstractStorage):