fix(tradein): неудача резолва yandex_jk_slug помечает дом — очередь не упирается в одни и те же пять (#2924) #3017
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#3017
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2924-yandex-jk-resolve-tried-at"
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?
Дефект
_SELECT_PENDING_HOUSESбрал ожидающие домаORDER BY h.id; из очереди уходил только дом, попавший в витрину. Неудачная попытка резолва не писала ничего — и следующий прогон брал те же дома в том же порядке. Замер из задачи (19.08): 397 ожидающих, первые пять поh.idзанимали все пять слотов (limit: 5) каждую неделю.Правка
houses.yandex_jk_resolve_tried_at timestamptz(nullable, без дефолта; существующие строки = «не пробовали»). Идемпотентна.RESOLVE_RETRY_DAYS = 7(какgeocode_tried_at, миграция 005); неудавшиеся — в конец очереди (ORDER BY h.id, tried_at NULLS FIRST);force=Trueмаркер игнорирует — ручной полный проход остаётся возможным.tried_atв отдельном SAVEPOINT — потеря отметки не фатальна (дом просто вернётся в очередь, как раньше), падение не роняет прогон. Удачный резолв маркер не ставит — иначе удачные дома уходили бы в конец и ждали неделю до обогащения.Как проверено
test_2924_yandex_resolve_tried_at.py— через реальныйenrich_yandex_newbuilding_sweepс двойником сессии: отдаёт pending-строки наDISTINCT ON (h.id)-выборку и запоминает весь ушедший SQL; резолвер импортируется внутри функции, поэтому патчится модуль-источник.origin/mainтри теста красные по значению: «неудача резолва не помечена; выполненный SQL:[COUNT…, COUNT…, COUNT…, SELECT DISTINCT ON (h.id)…]» — перечень запросов, которые реально ушли; «нет фильтра по маркеру»; «маркер не обходится через force».DISTINCT ON (h.id), а неFROM houses h … yandex_realty_nb: первая редакция теста ловилаCOUNT-запросы и краснела сама на себе — исправлено.pytest tradein-mvp/backend— 4659 passed, 29 skipped, rc=0; гейт нумерации миграций зелёный.Контекст, важный для чтения результата (#2860)
Первые пять домов очереди —
286394, 2671892, 2367237, 3003941, 609312— на выкаченном коде резолвятся все (проверено в контейнереtradein-scraperтем же трактом, что обход:uspenskij,shishkinn,sadovyj-2,dueht,petrovskij). Штатный прогон придёт 24.08 02:03 UTC (interval_days: 7, последний был 17.08 — до фикса #2860). На нём маркер не понадобится; он понадобится на первом неразрешимом доме — и тогда без него пять слотов снова встали бы.Отдельно, к решению владельца:
limit: 5при недельном интервале — ~80 недель на очередь 397. Это бюджет запросов к Яндексу, не код.