fix(tradein/scrapers): cian_city_sweep честный статус при defensive abort (#1949) #2339
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2339
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/1949-cian-full-load-zombie-watchdog"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #1949
Диагностика 2026-06-27 нашла 3 root cause в #1949:
cian_full_loadзомбится ~43% — уже закрыто ранее, PR #1952 (per-fetchwait_for+ фоновый heartbeat).cian_city_sweepфиксированныйANCHOR_TIMEOUT_SEC=240— уже закрыто ранее, PR #2272 (масштабирование через_cian_anchor_timeout_s(), часть scraper-kit pool activation, #2160).mark_bannedкрасит весь run даже если SERP уже сохранил лоты — этот паттерн был исправлен для avito (avito_serp_ok_not_banned, #1950/PR #1952), но НЕ применён кrun_cian_city_sweep. Это единственный реальный gap, закрытый этим PR.Новый helper
_mark_cian_sweep_abort(db, run_id, counters, reason)передrun_cian_city_sweep: на defensive abort (TimeoutError / consecutive SERP failures) проверяетlots_inserted + lots_updated > 0— если да иcian_sweep_ok_not_banned=True(новый флаг, default True) →mark_doneсabort_note; иначеmark_bannedкак раньше (backward-compat при flag=False). Отдельный от avito флаг — не смешиваем cian/avito семантику.3 новых regression-теста (lots>0→mark_done, lots=0→mark_banned, flag=False→backward-compat). Не трогает
_rotate_proxy_ip/changeip (#1950, отдельным PR) и non-cian источники.Известный follow-up (не в этом PR): та же mark_banned-без-lots-check логика существует в scraper-kit-копии
run_cian_city_sweep(tradein-mvp/packages/scraper-kit/.../pipeline.py) — отдельная активная архитектура, вне scope этой задачи (задокументировано в vault, кандидат на #2277 cleanup-волну).Проверено: ruff чисто, 13/13 новых+существующих тестов зелёные, широкий scoped run (
cian/scraper_resilience/anchor_watchdog/sweep_drain/provider_rotation) — 334 passed. code-reviewer APPROVE.