Развести окна ДомКлика: область не должна стартовать вместе с ЕКБ #3546
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
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#3546
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/domclick-window-collision"
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?
Исправляет дефект, который я внёс миграцией 306 (#3545).
Что не так
306 поставила
domclick_city_sweep_moskovskaya_oblastв окно 3-6 — ровно то же, где с самого начала сидит ЕКБ-строкаdomclick_city_sweep. Планировщик домклик-джобы не сериализует: 17.09 обе новые строки были заклеймлены в одну секунду (run 7333 и 7334, 05:00:55) и пошли параллельно.Два свипа ДомКлика делят один браузерный сайдкар и один пул прокси. В минуты параллельного прогона
tradein-browserдержал 67% CPU, 1.67 из 2.5 ГиБ и 2297 PID, а часть запросов возвращалась какPage.goto: Timeout 60000msиsocket hang up→ HTTP 500. Узлов сprovider_affinity='any'в пуле всего два (id 13 и 14), их же берёт cian — параллельная пара домклик-свипов забирает оба.Чего этот PR НЕ утверждает
Что параллельность уронила сбор. Померить это по ходу прогона нечем:
DomClickScraper.fetch_cityкопит лоты в память и сохраняет их однимsave_listingsпосле обхода всех шести бакетов — инкрементального сохранения нет. Поэтому «ноль строк вlistingsза 45 минут» — нормальное состояние середины прогона, а не признак провала: здоровый одиночный ЕКБ-свип 16.09 (run 7219) тоже не писал ничего 70 минут и затем положил 6372 seen / 237 new.Окна разводятся по ресурсной причине выше, а не по выводу из этой метрики. Изоляция настоящей причины (если она есть) — отдельным одиночным прогоном после того, как текущая пара завершится.
Что меняется
domclick_city_sweep(ЕКБ)domclick_city_sweep_moskvadomclick_city_sweep_moskovskaya_oblast9-12 выбрано потому, что там нет ни одной домклик-строки: домклик-джоб всего три —
domclick_city_sweep3-6,domclick_city_sweep_moskva0-3 иdomclick_detail_backfill15-18.next_run_atвыставлен явно и разнесён. Без этого строки сохранили бы значения, посчитанные при первом клейме (Москва 20.09 01:46, область 20.09 04:11 — внутри ЕКБ-окна 3-6), и коллизия повторилась бы через трое суток.AT TIME ZONE 'UTC'стоит на результате выражения, а не только внутри:next_run_at—timestamptz, аdate_truncот naive-времени вернул быtimestampбез зоны, и приведение поехало бы по таймзоне сессии.Проверка
Сухой прогон на проде под
BEGIN … ROLLBACK:tests/test_migration_numbering.py→ 1 passed, 2 skipped. Номер сверен сforgejo/mainчерезgit ls-tree -r(последняя — 306).Смежная находка, в этот PR не входит
У ДомКлика нет кооперативной отмены по бакетам:
runs.is_cancelledпроверяется только перед SERP-фазой (pipeline.py,run_domclick_city_sweep), тогда как avito/yandex/cian проверяют перед каждым якорем, а cian full-load — вon_bucket. Из-за этого повисший домклик-свип нельзя снять, он живёт до watchdog'а (11100 с ≈ 3 ч), удерживая прокси и сайдкар. Чинится тем же приёмом, что в cian full-load (колбэкon_bucket→raise RuntimeError("cancelled")) — отдельной задачей.🤖 Generated with Claude Code
https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs