feat(tradein/avito): ротация exit-IP по счётчику попыток в доборе карточек #3302
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#3302
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/avito-rotate-by-attempt-counter"
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?
Summary
Включает в работу инфраструктуру ротации из #3298. Каждые N попыток (не успехов) задача зовёт
rotate_proxy(), ждётreconnect_delay_s, затемrequest_context_reset()— свежий адрес со старыми куками бесполезен.AVITO_DETAIL_BACKFILL_ROTATE_AFTER_ATTEMPTS, дефолт 15.counters.blocked/ban_kindsне попадает и прерывание по критерию «14 блоков из 20» не приближает.BrowserFetcher.lease_id— read-only property, lease-механика (sticky-lease, heartbeat черезtouch()) не тронута.Зачем — замеры на живых портах
Один и тот же стенд, 39 карточек:
mobile=falsemobile=trueБилайновский порт умирает на 18-20 карточке и не восстанавливается. С ротацией обвал исчезает совсем. Порог вынесен в настройку именно потому, что зависит от оператора: Билайну нужно ~15, настоящим мобильным хватает ~30.
Ожидание после смены не косметическое: сразу после ротации канал 2-12 с нерабочий — в замере две карточки подряд ушли в таймаут, ещё одна получила 439. Без паузы каждая ротация дарила бы два ложных «блока».
Про режим прода
Ротация работает только в browser-режиме — только там задача держит lease с
proxy_id. Проверено на проде: планировщик живёт вtradein-scraper, а тамAVITO_DETAIL_BACKFILL_USE_CURL=falseприSCRAPER_FETCH_MODE=browserиUSE_PROXY_POOL_BROWSER=true— фича активна. Значениеtrueстоит только уtradein-backend, который добор не запускает. Предсуществующий комментарий в файле называлuse_curl=True«прод-дефолтом» — это неверно, поправлено в докстринге новой функции.Test plan
pytest tests/tasks/test_avito_detail_backfill.py— 41 passed (8 новых)pytest tests/tasks— 203 passed, 2 skippedpytest tests/services— 298 passedruff check— чистоcontinueawait asyncio.sleep, event loop не блокируется