From e5498682bac4802773932d3057e1e89a64c41dae Mon Sep 17 00:00:00 2001 From: lekss361 Date: Mon, 18 May 2026 01:10:06 +0300 Subject: [PATCH] fix(22d): commit outer transaction in scrape_catalog_objects orchestrator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #335 использовал `with db.begin_nested():` SAVEPOINT для per-row UPDATE, но outer transaction никогда не commit'ился. После цикла Celery task закрывал session (`db.close()` в finally) → autobegin'd outer tx rollback → все UPDATE'ы теряются. Симптом: task завершается с processed=3 succeeded=3, в Glitchtip нет ошибок, но в БД ни одного catalog_scraped_at != NULL. Fix: добавлен db.commit() после цикла + rollback на ошибку commit'а. --- backend/app/services/scrapers/domrf_catalog_object.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/backend/app/services/scrapers/domrf_catalog_object.py b/backend/app/services/scrapers/domrf_catalog_object.py index 6f3e5912..4e782a0e 100644 --- a/backend/app/services/scrapers/domrf_catalog_object.py +++ b/backend/app/services/scrapers/domrf_catalog_object.py @@ -449,6 +449,15 @@ async def scrape_catalog_objects( else: stats["failed"] += 1 + # Commit outer transaction: SAVEPOINT (`begin_nested`) releases внутри loop, + # но outer tx остаётся autobegin'd — без commit() все UPDATE'ы откатятся + # при db.close() в Celery task. + try: + db.commit() + except Exception: + db.rollback() + raise + logger.info( "scrape_catalog_objects done: processed=%d succeeded=%d failed=%d skipped=%d", stats["processed"],