fix(tradein): avito full-load probe resilience — browser 500/timeout splits/skips instead of crashing run #1757
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
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#1757
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/avito-fullload-probe-resilience"
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?
Прод-инцидент
run_avito_full_loadкрашился целиком на ПЕРВОЙ browser-ошибке. Тяжёлая probe-страница (studii?pmax=200000000— полная выдача) таймаутит наPage.goto→ browser отдаёт HTTP 500 →httpx.HTTPStatusErrorпробрасывается из probe до верха → run падает. studii идёт первой комнатностью → 0 собранных (run 199: умер за 5 мин, 0 uniq).Прод-трейс:
Решение
Probe-fetch в
_walk_price_rangeобёрнут в новый helper_probe_total(ловитhttpx.HTTPStatusError/TimeoutException/HTTPError+ generic →total=None;AvitoBlockedError/RateLimitedre-raise дляmark_banned). Приtotal=Noneпосле rotate+retry:hi-lo >= _AVITO_MIN_BRACKET) → принудительный SPLIT в обе половины (тяжёлая выдача станет загружаемой в узком ценовом диапазоне — спасает studii, не теряя её);skip + return(осознанная потеря хвоста, как cian-эталон).Leaf-пагинация уже устойчива (
asyncio.gather(return_exceptions=True)).run_avito_full_loadуже имеет финальныйmark_failed+ partial черезon_bucket— не менял.Изменения
scrapers/avito.py(+108) —import httpx;_probe_totalhelper;_walk_price_rangeprobe через него + split-on-heavy.tests/scrapers/test_avito_exhaustive.py(+193, 4 теста) — 500 на широком → split не крах; TimeoutException так же; 500 на узком → skip+continue; AvitoBlockedError → propagates.Тесты
Full suite: 1986 passed, 1 skipped, 0 failed. avito-exhaustive: 19 passed.
Прод-смоук после merge
Запустить avito_full_load → studii больше не валит run; в логах ожидается
avito: probe failed ... — splitting (assume heavy). Сравнить avito vtorichka active рост (baseline ~1385).