chore(ops): restore-дрель для базы tradein — она не покрывалась вовсе #3141

Merged
lekss361 merged 1 commit from chore/3xxx-restore-drill-tradein into main 2026-08-27 12:00:57 +00:00
Owner

Закрывает пункт приёмки «реальный restore-тест» из #2203 — на этот раз не разовым прогоном, а автоматически.

Дыра

Дрель восстановления стоит в cron с #3085, но её строка берёт только gendesign_*:

15 2 1 * * … ls -t /opt/gendesign/backups/gendesign_[0-9]*.sql.gz …

База tradein — клиентские оценки, листинги, дома, сделки — автоматически на восстановимость не проверялась ни разу. Дампы снимались, уезжали в S3, и никто не знал, разворачиваются ли они. Ровно тот случай, который обнаруживается в момент, когда восстановление уже понадобилось.

Правка

Одна строка в cron. Сам ops/restore-drill.sh менять не пришлось: он с самого начала умеет оба проекта — находит globals по своей схеме имён (tradein-globals-<ts>.sql.gz), подставляет свой список таблиц для сверки (listings, listing_sources, deals, houses, trade_in_estimates). Не хватало только вызова.

Проверено на боевом дампе до того, как добавлять

Прогнал ровно тот скрипт, что пойдёт по расписанию (оповещение заглушено через BACKUP_ENV_FILE, чтобы не слать в канал ложную тревогу):

tradein-20260827-111102.sql.gz, 343 МБ → 58 c
GRANT-ы применены, материализованные представления обновлены
PostGIS 3.4.3, таблиц в public: 76

listings         109978
listing_sources  106704
deals            108623
houses            10400
trade_in_estimates 1121

Сверка восстановленной базы с боевой:

таблица восстановлено боевая расхождение
houses 10400 10400
cad_buildings_local 47111 47111
listings 109978 109978
deals 108623 108623
osm_poi_ekb_local 4847 4847
trade_in_estimates 1121 1122 +1 после дампа
user_events 12700 12819 +119 после дампа

Расходятся только те две таблицы, что пополняются в реальном времени, и ровно на строки, созданные после снятия дампа (11:11, сверка в 11:49). Дамп верен.

Глоб из cron-строки проверен отдельно — находит нужный файл, код возврата 0.

Почему еженедельно, а не раз в месяц

Две минуты работы против месяца, в течение которого битый дамп остаётся незамеченным. Понедельник 03:00 — после дрели gendesign (02:15 первого числа, ей хватает форы даже когда первое выпадает на понедельник) и до ночных бэкапов в 03:30.

Refs #2203

Закрывает пункт приёмки «реальный restore-тест» из #2203 — на этот раз не разовым прогоном, а автоматически. ## Дыра Дрель восстановления стоит в cron с #3085, но её строка берёт **только** `gendesign_*`: ``` 15 2 1 * * … ls -t /opt/gendesign/backups/gendesign_[0-9]*.sql.gz … ``` База **tradein** — клиентские оценки, листинги, дома, сделки — автоматически на восстановимость не проверялась ни разу. Дампы снимались, уезжали в S3, и никто не знал, разворачиваются ли они. Ровно тот случай, который обнаруживается в момент, когда восстановление уже понадобилось. ## Правка Одна строка в cron. Сам `ops/restore-drill.sh` менять не пришлось: он с самого начала умеет оба проекта — находит globals по своей схеме имён (`tradein-globals-<ts>.sql.gz`), подставляет свой список таблиц для сверки (`listings, listing_sources, deals, houses, trade_in_estimates`). Не хватало только вызова. ## Проверено на боевом дампе до того, как добавлять Прогнал ровно тот скрипт, что пойдёт по расписанию (оповещение заглушено через `BACKUP_ENV_FILE`, чтобы не слать в канал ложную тревогу): ``` tradein-20260827-111102.sql.gz, 343 МБ → 58 c GRANT-ы применены, материализованные представления обновлены PostGIS 3.4.3, таблиц в public: 76 listings 109978 listing_sources 106704 deals 108623 houses 10400 trade_in_estimates 1121 ``` Сверка восстановленной базы с боевой: | таблица | восстановлено | боевая | расхождение | |---|---:|---:|---| | houses | 10400 | 10400 | — | | cad_buildings_local | 47111 | 47111 | — | | listings | 109978 | 109978 | — | | deals | 108623 | 108623 | — | | osm_poi_ekb_local | 4847 | 4847 | — | | trade_in_estimates | 1121 | 1122 | +1 после дампа | | user_events | 12700 | 12819 | +119 после дампа | Расходятся только те две таблицы, что пополняются в реальном времени, и ровно на строки, созданные **после** снятия дампа (11:11, сверка в 11:49). Дамп верен. Глоб из cron-строки проверен отдельно — находит нужный файл, код возврата 0. ## Почему еженедельно, а не раз в месяц Две минуты работы против месяца, в течение которого битый дамп остаётся незамеченным. Понедельник 03:00 — после дрели `gendesign` (02:15 первого числа, ей хватает форы даже когда первое выпадает на понедельник) и до ночных бэкапов в 03:30. Refs #2203
lekss361 added 1 commit 2026-08-27 11:58:01 +00:00
chore(ops): restore-дрель для базы tradein — она не покрывалась вовсе
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
ec6181b7b3
Дрель восстановления стоит в cron с #3085, но её строка берёт только
`gendesign_*`. База tradein — клиентские оценки, листинги, дома, сделки —
автоматически на восстановимость не проверялась ни разу: дампы снимались,
уезжали в S3, и никто не знал, разворачиваются ли они.

Сам `ops/restore-drill.sh` менять не пришлось — он с самого начала умеет оба
проекта: находит globals по своей схеме имён (`tradein-globals-<ts>`),
подставляет свой список таблиц для сверки. Не хватало ровно строки в cron.

Прогнал на боевом дампе 27.08 перед тем, как добавлять (оповещение заглушено,
чтобы не слать ложную тревогу):

    tradein-20260827-111102.sql.gz, 343 МБ → 58 c
    GRANT-ы применены, материализованные представления обновлены
    PostGIS 3.4.3, таблиц в public: 76
    listings 109978 · listing_sources 106704 · deals 108623
    houses 10400 · trade_in_estimates 1121

Сверка с боевой базой: houses, listings, deals, osm_poi сходятся точно;
trade_in_estimates и user_events больше на проде ровно на строки, созданные
ПОСЛЕ снятия дампа. То есть дамп верен.

Еженедельно, а не раз в месяц: две минуты работы против месяца, в течение
которого битый дамп остаётся незамеченным. Понедельник 03:00 — после дрели
gendesign (02:15 первого числа) и до ночных бэкапов в 03:30.
lekss361 merged commit 4f77197f01 into main 2026-08-27 12:00:57 +00:00
lekss361 deleted branch chore/3xxx-restore-drill-tradein 2026-08-27 12:00:57 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3141
No description provided.