Skip to content

Commit e1b455d

Browse files
authored
Merge pull request #27 from zeerayne/upload-timeouts
Add S3 upload timeouts
2 parents abb2a4c + d3e50d1 commit e1b455d

File tree

4 files changed

+10
-4
lines changed

4 files changed

+10
-4
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ TIP: для работы с путями в шаблонном файле нас
193193
|`AWS_RETENTION_DAYS` |Копии старше, чем количество дней в этой настройке будут удалсяться из бакета при работе резервного копирования|
194194
|`AWS_RETRIES` |Количество повторных попыток загрузки резервной копии в случае возникновении ошибки. Если установлено значение 0, повторные попытки предприниматься не будут. Полезно, если интернет-соединение нестабильно|
195195
|`AWS_RETRY_PAUSE` |Пауза в секундах перед осуществлением следующей попытки. Бывает полезно, если текущая попытка завершилась неудачей из-за сетевых проблем. Иногда имеет смысл подождать устранения проблем, прежде чем предпринимать повторные попытки|
196+
|`AWS_UPLOAD_TIMEOUT` |Таймаут загрузки каждой резервной копии в AWS. Значение `None` == таймаут отключен. Полезен т.к. в некоторых случаях скорость загрузки может упасть до нескольких бит/сек|
196197

197198
### PostgreSQL
198199

conf/default_settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
AWS_RETENTION_DAYS = 90
7373
AWS_RETRIES = 1
7474
AWS_RETRY_PAUSE = 600
75+
AWS_UPLOAD_TIMEOUT = 7200
7576

7677
## ---------- ##
7778
## PostgreSQL ##

core/aws.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,17 @@ async def upload_infobase_to_s3(
3838
ib_name: str, full_backup_path: str, semaphore: asyncio.Semaphore
3939
) -> core_models.InfoBaseAWSUploadTaskResult:
4040
aws_retries = settings.AWS_RETRIES
41+
aws_upload_timeout = settings.AWS_UPLOAD_TIMEOUT
4142
async with semaphore:
4243
try:
4344
# Добавляет 1 к количеству повторных попыток, потому что одну попытку всегда нужно делать
4445
for i in range(0, aws_retries + 1):
4546
try:
46-
return await _upload_infobase_to_s3(ib_name, full_backup_path)
47-
except EndpointConnectionError as e:
47+
# Changed in version 3.11: Raises TimeoutError instead of asyncio.TimeoutError
48+
return await asyncio.wait_for(
49+
_upload_infobase_to_s3(ib_name, full_backup_path), timeout=aws_upload_timeout
50+
)
51+
except (EndpointConnectionError, asyncio.TimeoutError, TimeoutError) as e:
4852
# Если количество попыток исчерпано, но ошибка по прежнему присутствует
4953
if i == aws_retries:
5054
raise e
@@ -55,7 +59,7 @@ async def upload_infobase_to_s3(
5559
await asyncio.sleep(aws_retry_pause)
5660
except Exception:
5761
log.exception(f"<{ib_name}> Unknown exception occurred in AWS coroutine")
58-
return core_models.InfoBaseAWSUploadTaskResult(ib_name, False)
62+
return core_models.InfoBaseAWSUploadTaskResult(ib_name, False)
5963

6064

6165
async def _upload_infobase_to_s3(ib_name: str, full_backup_path: str) -> core_models.InfoBaseAWSUploadTaskResult:

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "1cv8-mgmt-tool"
3-
version = "2025.01.14"
3+
version = "2025.04.05"
44
description = ""
55
authors = ["Ilya Bogdanov <zeerayne1337@gmail.com>"]
66

0 commit comments

Comments
 (0)