[tradein][devops] Деплой неатомарен — recreate scraper посреди run убивает in-flight sweep (cian_full_load → zombie) #1951

Open
opened 2026-06-27 07:47:16 +00:00 by lekss361 · 0 comments
Owner

Из cross-cutting диагностики 2026-06-27.

Симптом

Пересоздание tradein-scraper посреди работы убивает активный long-run. Пример: cian_full_load #404 — heartbeat замёрз 06-26 21:37, scraper recreate'нут в 21:42 (через 5 мин) → процесс убит на лету → run «висит running» до 6h-reaper'а → помечен zombie в 03:37 (потерян, 0 полезного). Значимая часть «зомби»-прогонов недели — артефакт деплоя, не реальный hang.

Дополнительно: деплой неатомарен / выборочен

Три сервиса пересозданы в РАЗНОЕ время разными образами: scraper 06-26 21:42 (образ 2146f9, билд 21:41), browser 00:34, backend 01:00:38 (:latest 861f912, поднят 06:20). Контейнеры крутят микс образов из разных билдов. Сейчас спасает случайная функциональная идентичность (scraper отстаёт только на estimator.py — косметика). Латентный риск: будущий деплой, меняющий только scraper-код, может НЕ пересоздать scraper → стейл-скрейпер в проде.

DoD (направление)

  • Не убивать in-flight runs: деплоить scraper в окно простоя расписаний ИЛИ дренировать активный run (graceful: дождаться running=0 перед recreate scraper).
  • startup-reaper: при старте scraper сразу метить осиротевшие status='running' (heartbeat stale) → zombie/cancelled, не ждать 6ч (сейчас #404 висел running 21:42→03:37).
  • атомарность recreate: пересоздавать tradein-сервисы консистентно (один образ/один деплой-step), чтобы scraper не отставал от backend.

scope/devops, tradein, priority/p2. Refs аудит 2026-06-27, deploy-tradein.yml, #559.

Из cross-cutting диагностики 2026-06-27. ## Симптом Пересоздание `tradein-scraper` посреди работы убивает активный long-run. Пример: `cian_full_load #404` — heartbeat замёрз 06-26 21:37, scraper recreate'нут в 21:42 (через 5 мин) → процесс убит на лету → run «висит running» до 6h-reaper'а → помечен `zombie` в 03:37 (потерян, 0 полезного). Значимая часть «зомби»-прогонов недели — артефакт деплоя, не реальный hang. ## Дополнительно: деплой неатомарен / выборочен Три сервиса пересозданы в РАЗНОЕ время разными образами: scraper 06-26 21:42 (образ 2146f9, билд 21:41), browser 00:34, backend 01:00:38 (`:latest` 861f912, поднят 06:20). Контейнеры крутят микс образов из разных билдов. Сейчас спасает случайная функциональная идентичность (scraper отстаёт только на `estimator.py` — косметика). **Латентный риск**: будущий деплой, меняющий только scraper-код, может НЕ пересоздать scraper → стейл-скрейпер в проде. ## DoD (направление) - **Не убивать in-flight runs**: деплоить scraper в окно простоя расписаний ИЛИ дренировать активный run (graceful: дождаться `running=0` перед recreate scraper). - **startup-reaper**: при старте scraper сразу метить осиротевшие `status='running'` (heartbeat stale) → `zombie`/`cancelled`, не ждать 6ч (сейчас #404 висел `running` 21:42→03:37). - **атомарность recreate**: пересоздавать tradein-сервисы консистентно (один образ/один деплой-step), чтобы scraper не отставал от backend. scope/devops, tradein, priority/p2. Refs аудит 2026-06-27, deploy-tradein.yml, #559.
lekss361 added the
priority/p2
scope/devops
tradein
labels 2026-06-27 08:51:22 +00:00
Sign in to join this conversation.
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#1951
No description provided.