fix(tradein/domclick): detail-бэкфилл ходил в сайдкар мимо прокси-пула (#3197 ч.1) #3222
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3222
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3197-domclick-backfill-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?
Часть 1 из #3197, только точка Домклика. Точки Циана и Яндекса поедут отдельными PR — issue сам предписывает подключать по одной с суточной паузой, чтобы при поломке было понятно, у кого именно.
Дефект
domclick_detail_backfill.pyстроил фетчер так:Без
proxy_provider/use_pool/environmentтелоPOST /fetchне несёт"proxy", сайдкар берёт свой env-прокси (SCRAPER_PROXY_URL), и прогон идёт мимо пула целиком: ни выбора узла, ниscrape_proxy_source_bans, ни ротации при блоке. Тот же дефект уже чинили наavito_detail_backfillиhouse_imv_backfill(#2698) — этот call site оставался последним.Оба параметра нужны вместе: при
use_pool=Falseпереданныйproxy_providerигнорируется (providers/_base.py:203,211-213).environmentтоже обязателен — без него отказ «пул пуст» на этом пути мёртвый код и фетчер молча уходит на env-прокси (#2616 шаг 1).Заодно: неверный комментарий
Комментарий над конструктором ссылался на
scrape_proxies.provider_affinity='domclick'и миграцию 173. На проде такого больше нет — миграция 253 сняла резервацию узла (#2800), и на 29.08 у всех четырёх включённых узлов (id 1, 9, 10, 11) стоитprovider_affinity='any'. Переписан по факту.Почему это безопасно — замер на проде 29.08
Главный риск был в том, что мобильные узлы 9/10/11 не проходят QRATOR, и подключение пула даст три быстрых бана вместо одного. Опровергнуто замером. Шесть карточек подряд через узел 11 (
asocks-mobile-3) сreuse_context=true:__SSR_STATE__, 5/5Контроль без
reuse_context, те же карточки: каждая вторая — страница блока ровно 26 625 байт, и так на всех четырёх узлах. То есть прежние отказы объяснялись выбрасыванием browser context (#3212, починено #3217), а не качеством узлов.Прогрев тратится один раз на прогон, а не на карточку: lease липкий —
browser_fetcher.py:381берёт его один раз в__aenter__, ре-acquire только на :730 после трёх подряд неудачных/fetch. Смена узла (а с ней и потеря тёплого контекста) остаётся редким осознанным событием.Тесты
tests/test_3197_domclick_proxy_pool_wiring.py— 2 теста в стилеtest_2698_imv_sidecar_wiring.py:use_poolберётся из конфига (проверены обе ветки, prod/dev),proxy_providerнепустой,environmentдоезжает,reuse_context=Trueне сломан. Сеть/БД/камуфокс замоканы.tests/test_3118_domclick_warm_context.py— старыйassert_called_once_withфиксировал точную сигнатуру и ломался бы на любом новом kwarg. Заменён на проверку значимых kwargs; полная проводка теперь покрыта отдельным тестом, ссылка проставлена в комментарии.Прогон: 24/24 зелёных (
test_3197+test_3118+test_3196), ruff чист. Ревью — ✅ APPROVE, критичных и минорных замечаний нет.Приёмка после деплоя
Плановый
domclick_detail_backfillв 15–18 UTC. Смотреть вscrape_runs.counters: узел должен приходить из пула, а не быть постоянным, иenriched— вырасти относительно нынешних 0–2 из 3–6 попыток.Refs #3197, #3212, #2698, #2616.