fix(scraper-kit): yandex _leaf под CAP не пишется в done-леджер как complete — capped_buckets отдельным счётчиком #3373
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#3373
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3368-yandex-leaf-complete-flag"
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?
Closes #3368 (follow-up #3362).
_leafyandex, обрезанныйmax_pages_per_bucket, писался как complete → с containment интервал зачитывался целиком, хвост крупного бакета терялся при резюме.Почему leaf переполняется (разбор, не догадка)
walk_price_rangeуходит в leaf приnot can_split; расщепляемый leaf приcap=500даёт ≤25 страниц — переполниться не может.pages_needed > max_pages(>1000 офферов) возможен ровно там, где делить нечем: размах <_YANDEX_SPLIT_MIN_BRACKET=500_000(финальные окна ~250к), открытый брекет250М+,depth>=8(недостижим). То есть бисекция уже отработала — исход «неполон по построению». По сетке: 0-2 бакета на прогон (плотная середина 2-к 3.5-4.5М) ≈ 50 лишних запросов на резюме; хвост они не доберут ни в одном прогоне — настоящее лечение в порогах (min_bracketниже /max_pagesвыше), поэтому счётчик отдельный:capped_buckets⊂partial_buckets._mark_bucketне тронут — путь тот же, что у_degraded(#3362).Тесты
test_3368_yandex_leaf_cap_complete.py: scoped31 passed, полный5465 passed, 35 skipped, ruff чист. Фальсификация (откат исходников):бакеты […] прочитаны на 1 страницу из 100 (totalItems=2000), но помечены complete,резюм не сделал ни одного запроса … assert 0 > 0— по значению (первый вариант падал AttributeError — заменён наgetattr(…, 0)).Найдено по пути (не в этом PR)
yandex
_leaf/_degradedзовутon_bucket(key, len(seen), …)(int), аrun_yandex_full_load._on_bucketтипизированlots: listи передаёт его вsave_listings— расхождение пред-существующее; отдельный issue.Прод
counters.partial_bucketsтеперь двигают и capped-бакеты — ожидание 0-2 на прогон yandex full-load.