fix(tradein/scraper): диагноз бана перестаёт назначаться по умолчанию (#2764) #2765
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#2765
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2764-ban-kind-no-default"
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?
Что
#2711 развёл «наш сбой» и «блокировка площадкой» полем
ban_kind, но дефолт в сигнатуреmark_bannedосталсяplatform, а диагноз передавали 3 вызывающих из 13. Замер на проде (2026-08-07): из 133 строкbannedдве написаны уже в рантайме — и обе получилиplatformпо умолчанию из общего финализатора backfill-задач (#2695/#2674), который диагноз не передаёт вовсе.pipeline:1568city-sweep detail-abortpipeline:1782nb-sweep SERP blockpipeline:3644avito full-loadpipeline:2305/2336yandex sweep, N подрядException)unknownpipeline:2829/2857cian sweep, N подрядunknownpipeline:2374/2890/3189/3419«все попытки не извлекли структуру»unknownpipeline:3873domclick QRATORunknownscrape_runs.mark_backfill_finished(avito)mark_backfill_finished(domclick)unknown(ограничение названо в коде)mark_backfill_finished(yandex)bannedнедостижима (нет счётчика blocked)Как
mark_banned→unknown(обе копии runs-модуля): пробел становится измеримым (SELECT ban_kind, count(*)), аplatform/infraначинают означать доказанное. Обязательный параметр отвергнут: 9 из 13 вызывающих типа не знают, и они скопировали бы любую строку, которую попросят.ban_kind_of_exception:else PLATFORMбыл тем же назначенным диагнозом уровнем ниже (тест #2711 прямо утверждалRuntimeError → platform). Теперь третий исход —unknown.fetch_detailbrowser-режим (п. 3 issue): поднималAvitoBlockedErrorна ЛЮБОЙ отказ сайдкара — 503 «browser unavailable», ConnectError/ReadTimeout, пустой пул. Диагноз врал даже там, где передавался. ТеперьAvitoSidecarUnavailableError(подтипAvitoRateLimitedError) — всеexcept (AvitoBlockedError, AvitoRateLimitedError)ловят его без изменений, чекпоинтdone_bucketsсохраняется так же. Зеркало того, что #2686 уже сделал для SERP-ветки.avito_detail_backfillдоносит диагнозы своих блоков до финализатора; сошлись — пишется, разошлись —unknown.unknownв CHECK (без неё запись падала бы, а падение внутри задачи выглядело бы обычнымfailed), COMMENT, и перевод двух строк, помеченных дефолтом ПОСЛЕ применения 218. Ретро-классификация 218 по тексту не тронута.Test plan
origin/mainс одной лишь константой-заглушкой): финализатор ×3, browser-ветка detail ×4, классификатор, дефолт обеих копий ×2, проводка backfill'а ×2.test_full_load_*_keeps_checkpoint) зелёные — путь сохраненияdone_bucketsне тронут.origin/main(пробелы локального venv, не эта правка).ruff check/ruff formatчисто по изменённым файлам.SELECT ban_kind, count(*) FROM scrape_runs WHERE status='banned' GROUP BY 1→ появлениеunknown(2 исторические + новые).Refs #2764
ban_kindпроставляется по умолчанию у 9 вызывающих из 12 — метка выглядит доказательством, не будучи им #2764ban_kindпроставляется по умолчанию у 9 вызывающих из 12 — метка выглядит доказательством, не будучи им #2764