fix(cian): капча видна в отчёте прогона (ban_kinds.platform по типу) и банит узел на curl-пути (#3402 follow-up) #3406
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#3406
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3402-followups-ban-kinds-curl"
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?
Follow-up к #3402 / PR #3403 (два замечания ревью). Не закрывает issue (приёмка 13:24 UTC).
1. Капча-волна не была видна в отчёте прогона.
_note_refusalвcian_history_backfill.pyключевался по HTTP-статусу (ban_kind_from_status): на сайдкар-путиNone, на своём детекте 200 →ban_kindsпустой, рос толькоlistings_failed_fetch. Теперь_note_refusal(result, status, exc=None)(:101,:123, вызов:271) — диагноз сперва по ТИПУ черезban_kind_of_exception, статус — фолбэк.ban_kind_of_exception(orchestration/pipeline.py:221):isinstance(exc, AvitoBlockedError | AvitoRateLimitedError)→isinstance(exc, ProxyBanError | AvitoRateLimitedError)—CianBlockedError(ProxyBanError)раньше уезжал вunknown; для avito ноль изменений (AvitoBlockedError(AvitoError, ProxyBanError)),DomClickBlockedErrorтоже перестаёт бытьunknown; веткаBAN_KIND_INFRAвыше и не задета. Инвариант #3196:unknownпо типу иNoneпо статусу → счётчики не растут.SidecarBanPageErrorдо бэкфилла не долетает (конвертируется вCianBlockedErrorвfetch_detail:192).2. curl-путь детектил капчу, но не банил. Детект перенесён ВНУТРЬ
with curl_proxy_url(...)(providers/cian/detail.py:257-262, сразу послеhtml = resp.text) —finallyхелпера сам делаетmark_banned(source='cian'); общий предикат_is_captcha_title(:141) для обоих путей, чтобы маркеры не разъехались.Порог
banned(ответ на вопрос ревью):scheduler.py:199—bannedприban_kindsнепустом и нуле успехов; порога по числу отказов нет ни для 403 (#3196/#2700), ни теперь для капчи — правка кладёт капчу в ту же корзину, что 403, не понижает порог. Что грубо:bannedна одном наблюдении читается как «Циан отбил нас», а показано «отбил 1-2 узла» (ротация на 3-м провале; «всем узлам» подкреплено с ~3×N подряд). Гейт «не раньше ротации» — отдельное решение, одинаковое для 403 и капчи. Побочно: послеmark_bannedтекущая аренда живёт до 3-го провала — 2 фетча уходят через уже забаненный узел.Тесты (
tests/test_3402_cian_captcha_http200.py:207/235/262): счётчики батча{"platform": 1}; curl-путь →mark_banned(1,'cian'),mark_health(ok=True)не вызван; «Ошибка - Циан» на curl-пути по-прежнему не банит (контроль от «баним всё подряд»).Фальсификация (
git apply -Rисходников):assert {} == {'platform': 1},assert [] == [(1, 'cian')]— 2 failed. Восстановлено.Прогоны: полный backend
5602 passed, 35 skipped(rc=0); ruff OK.Приёмка: прогон с капчей —
ban_kinds.platform > 0,blocked > 0,ban_kind='platform';cian_city_sweepdetail-фаза с капчей — свежая строка вscrape_proxy_source_bans(source='cian') на капча-узле.Code-review (06.09): ✅. Радиус расширения
ban_kind_of_exceptionдоProxyBanError— no-op для всех девяти существующих вызывающих (за Avito-тьюплами иexcept NoProxyAvailableError; веткаinfraпервая), домклик-бэкфилл зовёт свой_ban_kind_of_blockпо статусу,BlockRatioBreaker.record_block— единственный вызывающий avito; поведение меняется ровно у нового_note_refusal. curl-путь:mark_banned+mark_health(False)+ release вfinallyхелпера; оба теста краснеют по месту детекта (снять in-block детект —pytest.raisesвсё ещё зелёный, аmark_banned_calls == []). Известное следствие: капча-волна на curl-пути банит до ~3 узлов за прогон (_cian_detail_abort=3) — та же сделка, что #2700 для 403.