From cd21a8216836976bcfc68a69f3bfc3826641bdb2 Mon Sep 17 00:00:00 2001 From: wren <“porlong@qq.com”> Date: Tue, 12 May 2026 12:09:00 +0800 Subject: [PATCH] fix: cover archived stuck documents in scanner --- .../fastapi_leaudit/leaudit_bridge/tasks.py | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/fastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.py b/fastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.py index 8995ba4..415dbb4 100644 --- a/fastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.py +++ b/fastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.py @@ -703,10 +703,9 @@ async def _scan_and_fail_stuck_documents(*, timeout_minutes: int) -> dict[str, A END ))::bigint AS idle_seconds FROM leaudit_documents d - JOIN leaudit_audit_runs ar + LEFT JOIN leaudit_audit_runs ar ON ar.id = d.current_run_id WHERE d.deleted_at IS NULL - AND d.is_latest_version = true AND ( LOWER(COALESCE(ar.status, '')) IN ('pending', 'queued', 'running', 'retrying') OR LOWER(COALESCE(d.processing_status, '')) IN ('waiting', 'queued', 'running', 'processing') @@ -741,7 +740,7 @@ async def _scan_and_fail_stuck_documents(*, timeout_minutes: int) -> dict[str, A for row in timed_out_rows: document_id = int(row["document_id"]) - run_id = int(row["run_id"]) + run_id = int(row["run_id"]) if row.get("run_id") is not None else None idle_seconds = int(row.get("idle_seconds") or 0) run_phase = row.get("phase") run_status = row.get("run_status") @@ -757,23 +756,24 @@ async def _scan_and_fail_stuck_documents(*, timeout_minutes: int) -> dict[str, A try: await _update_status_safe(document_id, "failed") - await storage.fail_run( - document_id, - run_id=run_id, - phase=run_phase or "dispatch", - message=message, - detail_json={ - "reason": "stuck_timeout", - "timeoutMinutes": timeout_minutes, - "idleSeconds": idle_seconds, - "taskId": row.get("task_id"), - "runStatus": run_status, - "processingStatus": processing_status, - "phase": run_phase, - "fileName": file_name, - "region": row.get("region"), - }, - ) + if run_id is not None: + await storage.fail_run( + document_id, + run_id=run_id, + phase=run_phase or "dispatch", + message=message, + detail_json={ + "reason": "stuck_timeout", + "timeoutMinutes": timeout_minutes, + "idleSeconds": idle_seconds, + "taskId": row.get("task_id"), + "runStatus": run_status, + "processingStatus": processing_status, + "phase": run_phase, + "fileName": file_name, + "region": row.get("region"), + }, + ) failed_items.append( { "document_id": document_id,