fix(tradein/domclick): свип ходит через прокси-пул, а отказ узла не обнуляет прогон (#2657) #2796
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#2796
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2657-domclick-proxy-pool"
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?
Что нашлось
Постановка #2657 (от 05.08: «свип даёт ~1% предложения») на сегодня устарела в худшую сторону: с 06.08 свип даёт 0, а не 1%.
Прод 09.08:
Контрольная группа отвечает: упал ОДИН Домклик, инфраструктура ни при чём.
listings.source='domklik': 376 активных,max(scraped_at) = 2026-08-05 05:43— четверо суток без единого подтверждения.Где теряется
НЕ QRATOR и НЕ куки. Логи прогона 3502 (09.08 03:52):
proxy_lease_id=None— домклик единственный из sweep-источников не подключён к пулу (#2160 P4). Значит сайдкар идёт через статическийSCRAPER_PROXY_URL=scrape_proxies.id=1(residential,provider_affinity='domclick', миграция 173).Живая проба тем же трактом (прод-сайдкар, 09.08), один и тот же URL BFF:
NS_ERROR_PROXY_BAD_GATEWAY{"offersCount":704,"snippetsCount":678}Второй дефект рядом:
fetch_cityловил толькоValueError/TypeError(ошибки разбора).httpx.HTTPStatusErrorот сайдкара летел мимо цикла поROOM_BUCKETSи убивал прогон на ПЕРВОМ бакете — отсюдаbuckets=0/6. Он же не давал сработать ротации lease после N подряд провалов (_LEASE_ROTATE_AFTER_FAILS): до неё не доживали.Правка
_job_domclick_city_sweep→proxy_provider=ctx.proxy_provider(как у всех остальных свипов); проброс черезrun_domclick_city_sweep→DomClickScraper→build_browser_fetcher.exceptрасширен доException(неBaseException—CancelledErrorобязан проходить насквозь): отказ одного бакета не обнуляет прогон, битый бакет по-прежнему НЕ засчитывается в охват (#2670), статус остаётся честным.Побочно:
fetcher.report_banпри QRATOR-блоке перестаёт быть пустышкой — с пулом узел уходит вscrape_proxy_source_bans.Опровергнутые предпосылки
blocked=0), отказ транспортный.Test plan
TypeError: unexpected keyword argument 'proxy_provider';HTTPStatusErrorнаружу), зелёные на новомpytest -k "domclick or proxy or scheduler or pipeline or browser"— 435 passeddomclick_city_sweepпосле деплоя даётlots_fetched > 1000иbuckets_completed >= 5. Проверять запросом:select id, started_at, status, counters from scrape_runs where source='domclick_city_sweep' order by id desc limit 3;Если снова 0 при
proxy_lease_id != Noneв логах — значит блок реально выше по потоку, и вопрос уходит владельцу (пополнение пула, #2638).Не сделано здесь (нужен владелец / database-expert)
scrape_proxies.id=1:provider_affinity='domclick'теперь вредит — резервирует под Домклик узел, который для Домклика мёртв, и прячет его от остальных. ПроситсяUPDATE ... SET provider_affinity='any'(илиenabled=false) отдельной миграцией. Без неё код тоже выживает: узел выдаётся, падает, lease ротируется,consecutive_failsсо временем его отключает — но первый бакет каждого прогона будет тратиться впустую.https://www.avito.ru/robots.txtдля ВСЕХ узлов. Поэтому id=1 стоит сbrowser_fail_streak=0и свежимbrowser_check_at, будучи мёртвым для Домклика: проба идёт не тем трактом, что работа. Отдельный issue.scripts/ingest_domclick_jsonl.pyбезrun_id) не трогал.Refs #2657