diff --git a/backend/app/workers/celery_app.py b/backend/app/workers/celery_app.py index fe1dbc6f..036960fb 100644 --- a/backend/app/workers/celery_app.py +++ b/backend/app/workers/celery_app.py @@ -279,7 +279,9 @@ def _resume_zombie_runs(sender=None, **_kwargs) -> None: from app.core.db import SessionLocal + # ── kn_scrape_runs resume ── db = SessionLocal() + ids: list[int] = [] try: rows = ( db.execute( @@ -297,34 +299,32 @@ def _resume_zombie_runs(sender=None, **_kwargs) -> None: .mappings() .all() ) - if not rows: - logger.info("worker_ready: нет stale runs для resume") - return - - ids = [int(r["run_id"]) for r in rows] - # Помечаем найденные как 'zombie' одним апдейтом — resume создаст новые - # run_id со ссылкой resumed_from_run_id. - db.execute( - text( - """ - UPDATE kn_scrape_runs - SET status = 'zombie', - finished_at = NOW(), - error = COALESCE(error, - 'auto-zombie at worker_ready, resume scheduled') - WHERE run_id = ANY(:ids) - """ - ), - {"ids": ids}, - ) - db.commit() + if rows: + ids = [int(r["run_id"]) for r in rows] + # Помечаем найденные как 'zombie' одним апдейтом — resume создаст новые + # run_id со ссылкой resumed_from_run_id. + db.execute( + text( + """ + UPDATE kn_scrape_runs + SET status = 'zombie', + finished_at = NOW(), + error = COALESCE(error, + 'auto-zombie at worker_ready, resume scheduled') + WHERE run_id = ANY(:ids) + """ + ), + {"ids": ids}, + ) + db.commit() + else: + logger.info("worker_ready: нет stale kn runs для resume") except Exception as e: - logger.exception("worker_ready resume scan failed: %s", e) + logger.exception("worker_ready kn resume scan failed: %s", e) try: db.rollback() except Exception: pass - return finally: db.close()