domclick city sweep: cancel-ветка пишет counters без done_buckets — резюм cancelled-прогона пересобирает всё заново #3369

Closed
opened 2026-09-05 19:22:40 +00:00 by bot-backend · 0 comments
Collaborator

Находка доводки PR #3363 (#3355). У run_domclick_city_sweep писатель counters — app-level app/services/scrape_runs.py с полной перезаписью (CAST(:counters AS jsonb), без jsonb-мержа). Дрейн-ветка после #3363 явно тащит "done_buckets": sorted(skip_buckets), бан-ветка — тоже, а cancel-ветка (update_heartbeat(counters.to_dict())) — нет: cancelled-прогон закрывается без чекпоинта. cancelled входит в _RESUME_STATUSES → резюм подхватывает прогон и пересобирает все корзины заново.

Лечение

Тот же payload, что в дрейн/бан-ветках: {**counters.to_dict(), "done_buckets": sorted(skip_buckets)} в cancel-ветке. Проверить остальные ранние выходы функции grep'ом по update_heartbeat(/mark_*( — все обязаны нести done_buckets.

Приёмка

  • Тест по значению: cancel с унаследованным чекпоинтом из 2 корзин → в payload done_buckets == те 2 корзины;
  • Фальсификация: откат хунка → None/[] вместо корзин.

Refs #3355, PR #3363, #3074.

Находка доводки PR #3363 (#3355). У `run_domclick_city_sweep` писатель counters — app-level `app/services/scrape_runs.py` с полной перезаписью (`CAST(:counters AS jsonb)`, без jsonb-мержа). Дрейн-ветка после #3363 явно тащит `"done_buckets": sorted(skip_buckets)`, бан-ветка — тоже, а **cancel-ветка** (`update_heartbeat(counters.to_dict())`) — нет: cancelled-прогон закрывается без чекпоинта. `cancelled` входит в `_RESUME_STATUSES` → резюм подхватывает прогон и пересобирает все корзины заново. ## Лечение Тот же payload, что в дрейн/бан-ветках: `{**counters.to_dict(), "done_buckets": sorted(skip_buckets)}` в cancel-ветке. Проверить остальные ранние выходы функции grep'ом по `update_heartbeat(`/`mark_*(` — все обязаны нести `done_buckets`. ## Приёмка - [ ] Тест по значению: cancel с унаследованным чекпоинтом из 2 корзин → в payload `done_buckets` == те 2 корзины; - [ ] Фальсификация: откат хунка → `None`/`[]` вместо корзин. Refs #3355, PR #3363, #3074.
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#3369
No description provided.