Skip to content

Commit fc18eaa

Browse files
authored
Merge pull request #26 from zeerayne/aiopg-retries
[Backup scenario] aiopg retries when checking pg version
2 parents f012cce + 1cf2f27 commit fc18eaa

File tree

6 files changed

+828
-639
lines changed

6 files changed

+828
-639
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@ dmypy.json
139139
# All deb packages
140140
*.deb
141141

142+
# ruff cache
143+
.ruff_cache
144+
142145
# Postgres datadir
143146
.postgres-data
144147
# Ragent datadir

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
repos:
22
- repo: https://github.com/astral-sh/ruff-pre-commit
33
# Ruff version.
4-
rev: v0.8.2
4+
rev: v0.9.1
55
hooks:
66
# Run the linter.
77
- id: ruff

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ TIP: для работы с путями в шаблонном файле нас
127127
|Параметр|Описание|
128128
|-------:|:-------|
129129
|`V8_CLUSTER_ADMIN_CREDENTIALS`|Учетные данные администратора кластера 1С Предприятие|
130-
|`V8_CLUSTER_CONTROL_MODE `|Режим взаимодействия с кластером 1С Предприятие: через COM-компоненту (`'com'`) или через клиент администрирования кластера (`'rac'`)|
130+
|`V8_CLUSTER_CONTROL_MODE` |Режим взаимодействия с кластером 1С Предприятие: через COM-компоненту (`'com'`) или через клиент администрирования кластера (`'rac'`)|
131131
|`V8_INFOBASES_CREDENTIALS` |Сопоставление с именами информационных баз, именами пользователей и паролями, которые будут использованы для подключения к информационным базам. Если информационная база не указана в списке в явном виде, для подклчения к ней будут использованы данные от записи `default`|
132132
|`V8_INFOBASES_EXCLUDE` |Список с именами информационных баз, которые будут пропущены. Никакие операции с ними выполняться не будут|
133133
|`V8_INFOBASES_ONLY` |Если список не пустой, все действия будут проводиться только с информационными базами, указанными в нём|

backup.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,17 @@ async def _backup_pgdump(
128128
except (ValueError, KeyError) as e:
129129
log.error(f"<{ib_name}> {str(e)}")
130130
return core_models.InfoBaseBackupTaskResult(ib_name, False)
131-
132-
try:
133-
pg_major_version = (await postgres.get_postgres_version(db_host, db_port, db_name, db_user, db_pwd)).major
134-
blobs = "large-objects" if pg_major_version >= 16 else "blobs"
135-
except (ConnectionRefusedError, CancelledError, TimeoutError) as e:
136-
log.error(f"<{ib_name}> {str(e)}")
137-
return core_models.InfoBaseBackupTaskResult(ib_name, False)
131+
backup_retries = settings.BACKUP_RETRIES_PG
132+
for i in range(0, backup_retries + 1):
133+
try:
134+
pg_major_version = (await postgres.get_postgres_version(db_host, db_port, db_name, db_user, db_pwd)).major
135+
blobs = "large-objects" if pg_major_version >= 16 else "blobs"
136+
except (ConnectionRefusedError, CancelledError, TimeoutError) as e:
137+
if i == backup_retries:
138+
log.error(f"<{ib_name}> {type(e)}: {e.message}")
139+
return core_models.InfoBaseBackupTaskResult(ib_name, False)
140+
else:
141+
log.error(f"<{ib_name}> Postgres version check failed, retrying")
138142

139143
ib_and_time_str = utils.get_ib_and_time_string(ib_name)
140144
backup_filename = os.path.join(
@@ -153,7 +157,6 @@ async def _backup_pgdump(
153157
pgdump_env["PGPASSWORD"] = db_pwd
154158
log.debug(f"<{ib_name}> Created pgdump command [{pgdump_command}]")
155159
# Делает резервную копию базы данных в *.pgdump файл
156-
backup_retries = settings.BACKUP_RETRIES_PG
157160
# Добавляет 1 к количеству повторных попыток, потому что одну попытку всегда нужно делать
158161
for i in range(0, backup_retries + 1):
159162
try:

0 commit comments

Comments
 (0)