fix(site_finder): SAVEPOINT-isolate quarter-dump lookup db.execute (#2464 Wave 2) #2467
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#2467
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "worktree-agent-aa1fb22f5cd3eb4a8"
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?
Что
Волна 2 эпика #2464, часть 1/3 —
quarter_dump_lookup.py(11 swallow-сайтов). Найдено completeness-sweep'ом (46 агентов, adversarial-verified), который выявил, что exhaustive-review пропустил бóльшую часть кластера A.Баг-класс
Хелперы
_get_*последовательно исполняются вget_quarter_dump_data(db, …)на общей/analyze-сессии (parcels.py:2575,Depends(get_db)). Каждый ловил сбойdb.executeи возвращал фолбэк без rollback → Postgres держит транзакциюaborted→ следующие_get_*на том жеdb, а также downstreamget_or_fetch_zone_regulation(parcels.py:2619) и позднийbegin_nested-блок «9f cad_parcels» падаютcurrent transaction is aborted/PendingRollbackError.Фикс
SAVEPOINT (
with db.begin_nested():) на каждом swallow-сайте (11 шт.):_get_zoning·_get_zouit_overlaps·_get_cad_zouit_overlaps·_get_engineering_nearby·_get_risk_zones·_get_opportunity_parcels·_get_red_lines·_get_engineering_structures_by_boundary(2 независимых savepoint — COUNT + row-fetch) ·_get_zouit_engineering_overlaps(2 независимых).Два сайта с двумя
db.executeпод однимexceptполучили по savepoint на каждый execute — иначе RELEASE-trap (внешний RELEASE падает в aborted-tx).get_connection_pointsи_get_parcel_wktподтверждены already-safe (ихdb.executeпропагирует, не глотает — на ошибке весь запрос падает, сессию не отравляет). Фолбэки и типыexceptбайт-в-байт неизменны.Тесты
Новый
test_quarter_dump_savepoint.py(14 тестов): для репрезентативного набора (вкл. оба two-savepoint-случая) — фолбэк сохранён ·begin_nestedреально вызван (для two-savepoint:call_count == 2) · сессия usable после сбоя. Тесты честно раскрывают, чтоMagicMock≠ реальная aborted-tx Postgres (калиброванный caveat).tests/services/site_finder/+ legacy = 648 passed, ruff чисто.Ревью
code-reviewer: ✅ APPROVE, ноль блокеров. Все 15
db.executeв файле сверены сbegin_nested(11 обёрнуто + 4 non-swallowing), shape SAVEPOINT корректен везде, two-savepoint-сайты — независимые, ноль поведенческого дрейфа (92 legacy-теста без изменений), нет:x::type, нет tradein.Refs #2464 (cluster A, Wave 2 · 1/3).