From ec6181b7b3542efb7029b3574ac077eb995d395e Mon Sep 17 00:00:00 2001 From: bot-backend Date: Thu, 27 Aug 2026 14:57:40 +0300 Subject: [PATCH] =?UTF-8?q?chore(ops):=20restore-=D0=B4=D1=80=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=20=D0=B4=D0=BB=D1=8F=20=D0=B1=D0=B0=D0=B7=D1=8B=20tradei?= =?UTF-8?q?n=20=E2=80=94=20=D0=BE=D0=BD=D0=B0=20=D0=BD=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BA=D1=80=D1=8B=D0=B2=D0=B0=D0=BB=D0=B0=D1=81=D1=8C=20?= =?UTF-8?q?=D0=B2=D0=BE=D0=B2=D1=81=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Дрель восстановления стоит в cron с #3085, но её строка берёт только `gendesign_*`. База tradein — клиентские оценки, листинги, дома, сделки — автоматически на восстановимость не проверялась ни разу: дампы снимались, уезжали в S3, и никто не знал, разворачиваются ли они. Сам `ops/restore-drill.sh` менять не пришлось — он с самого начала умеет оба проекта: находит globals по своей схеме имён (`tradein-globals-`), подставляет свой список таблиц для сверки. Не хватало ровно строки в 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. --- ops/crontab-poincare.cron | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ops/crontab-poincare.cron b/ops/crontab-poincare.cron index c89363ef..8a63c487 100644 --- a/ops/crontab-poincare.cron +++ b/ops/crontab-poincare.cron @@ -49,6 +49,19 @@ # трогает никогда (см. заголовок скрипта). 15 2 1 * * bash -c 'f=$(ls -t /opt/gendesign/backups/gendesign_[0-9]*.sql.gz 2>/dev/null | head -1); if [ -n "$f" ]; then bash /opt/gendesign/ops/restore-drill.sh "$f"; else echo "no gendesign dump found to drill"; exit 1; fi' >> /opt/gendesign/logs/restore-drill.log 2>&1 +# Та же дрель для базы tradein — она НЕ покрывалась строкой выше (#2203). +# Строка выше берёт только `gendesign_*`, то есть восстановимость базы +# клиентских оценок автоматически не проверялась вовсе: ни листинги, ни дома, +# ни сами оценки. Замер 27.08: дамп 343 МБ разворачивается за 58 c и сходится +# с боевой базой построчно (houses 10400, listings 109978, deals 108623 — +# расхождения только по строкам, созданным ПОСЛЕ снятия дампа). +# +# Еженедельно, а не раз в месяц: две минуты работы против месяца, в течение +# которого битый дамп остаётся незамеченным. Понедельник 03:00 — после +# монтажной дрели gendesign (02:15 первого числа, ей хватает форы даже когда +# первое выпадает на понедельник) и до ночных бэкапов в 03:30. +0 3 * * 1 bash -c 'f=$(ls -t /opt/gendesign/backups/tradein/tradein-[0-9]*.sql.gz 2>/dev/null | head -1); if [ -n "$f" ]; then bash /opt/gendesign/ops/restore-drill.sh "$f"; else echo "no tradein dump found to drill"; exit 1; fi' >> /opt/gendesign/logs/restore-drill.log 2>&1 + # ── Обогащение и геокодирование (ходят в tradein-backend) ─────────────────── 0 5 * * * cd /opt/gendesign/tradein-mvp && docker exec tradein-backend python -m scripts.backfill_houses_dadata --limit 100 --priority both >> /opt/gendesign/logs/dadata-backfill.log 2>&1 30 5 * * * cd /opt/gendesign/tradein-mvp && docker exec tradein-backend python -m scripts.geocode_deals_from_houses --limit 50000 >> /opt/gendesign/logs/deals-geocode.log 2>&1 -- 2.45.3