fix(tradein/cian): вернуть сбор вторички — sweep выбрасывал всё найденное #2880
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#2880
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/tradein-cian-secondary"
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?
Как нашлось
Включил первый город области (#2879) и стал смотреть не на статус, а на данные. Прогон отработал зелёным, не сохранив ничего:
84 лота найдено, все 84 отброшены как вторичка,
errors=0, статусdone.Причина
scraper_kit.orchestration.schedulerчитает параметр с дефолтом True:Сид 179 (волна 1) ставит
falseявно. Миграция 262 (волна 2) этот ключ потеряла.Мера оценивает вторичку —
estimatorотбирает аналоги сlisting_segment IS NULL OR = 'vtorichka'. Значит режим «только новостройки» для этих строк означает сбор в никуда: запросы к площадке идут, данные выбрасываются, мониторинг зелёный.Побочная находка — та же дыра уже в проде
Под гейт попала 41 строка, а не 40. Лишняя —
cian_city_sweep_verkhnyaya_pyshmaиз волны 1, включённая и работающая: миграция 179 проставила ключ не всем своим городам.На живых данных:
То есть оценщик по Верхней Пышме получал с Циана 3 пригодных объявления вместо ~300. Сбор шёл, статус зелёный, данные молча терялись. Эта миграция чинит и её.
Summary
"newbuilding_only": falseвdefault_params41 строки: 40 из волны 2 + Верхняя Пышма.default_paramsна проде).NOT (default_params ? 'newbuilding_only')— ключ дописывается только там, где его нет. Повторный прогон — no-op, значение, выставленное оператором вручную позже, не перетрётся.Test plan
BEGIN→UPDATE 41→ROLLBACK, ошибок нетdropped_secondaryсменилось на реальныеins, аlistings.city— «Новоуральск», а не «Екатеринбург»Вывод на будущее
doneсerrors=0ничего не гарантирует: здесь он означал «успешно выбросили всё, что нашли». Проверять надо строки в базе, а не статус прогона.Первый включённый город области отработал «успешно», не сохранив ничего: cian-sweep run_id=3884 anchor Новоуральск центр: SERP fetched=84 nb_kept=0 dropped_secondary=84 ins=0 upd=0 done: anchors=1/1 lots=84 (ins=0/upd=0) errors=0 84 лота найдено, все 84 отброшены как вторичка, статус зелёный. Причина: scheduler читает newbuilding_only с дефолтом True. Сид 179_ ставит false явно, 262_ этот ключ потерял. Мера оценивает вторичку — estimator отбирает аналоги с listing_segment IS NULL OR = 'vtorichka', — поэтому режим «только новостройки» тут означает сбор в никуда. Побочно нашлась та же дыра в ПРОДЕ: 179_ проставил ключ не всем своим городам, и cian_city_sweep_verkhnyaya_pyshma всё это время работала в режиме новостроек. На живых данных: Верхняя Пышма (ключа нет): cian 184 активных → вторички 3, новостроек 181 Первоуральск (ключ есть): cian 336 активных → вторички 308 То есть оценщик по Верхней Пышме получал с Циана 3 объявления вместо ~300. Правит 41 строку: 40 из wave 2 + Верхнюю Пышму. avito/yandex не трогаем — у них этого параметра нет ни в одной волне. Идемпотентность: гейт NOT (default_params ? 'newbuilding_only') — ключ дописывается только там, где его нет, значение оператора не перетрётся. Проверено сухим прогоном на боевой схеме: UPDATE 41, ROLLBACK.