fix(ptica): успехи батча каталога фиксируются по ходу, а не одним commit'ом в конце (#2464) #2960
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#2960
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2464-catalog-batch-commits"
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?
Пункт эпика #2464:
domrf_catalog_object.py:440.Дефект
db.commit()стоял после блокаasync with BrowserSession(...). Весь батч жил в одной незакоммиченной транзакции, и любой отказ после цикла — исключение вBrowserSession.__aexit__, снятие Celery-таски, перезапуск контейнера — обнулял все уже успешные UPDATE'ы.Масштаб
Беговой режим здесь
force=True(«Загрузить все») → SQL безLIMIT:catalog_scraped_atМногочасовой прогон, где отказ в конце стоит всего.
Достижимость — честно
Скрейпер сейчас не отрабатывает вовсе: DOM.РФ отдаёт страницу «Доступ заблокирован [403]» с капчей. Проверил пробой 20.08 через рабочий тракт, подробности в #2443.
Чинить это стоит до разбана, а не после: первый же прогон будет ровно
force=Trueна 13 200 объектов — худший возможный случай для отказа в конце.Правка
commitпосле каждого успешного объекта. SAVEPOINT внутриscrape_catalog_objectк этому моменту уже снят, поэтому commit корректен.Финальный
commitоставлен намеренно: он закрывает транзакцию, которую могли autobegin'ить неудачные итерации (их SAVEPOINT откатился, а внешняя транзакция открыта), и сохраняет прежнее поведение для вызывающих.Тест
Не ходит ни в сеть, ни в БД:
BrowserSessionиscrape_catalog_objectподменены, сессия — счётчик вызовов. Противorigin/main:Второй контроль стоит не для симметрии: он ловит «починку», которая выкинула бы финальный commit, решив, что по-объектных достаточно.
Прогоны