fix: cover archived stuck documents in scanner

This commit is contained in:
wren
2026-05-12 12:09:00 +08:00
parent 3823c9a2e4
commit cd21a82168
@@ -703,10 +703,9 @@ async def _scan_and_fail_stuck_documents(*, timeout_minutes: int) -> dict[str, A
END END
))::bigint AS idle_seconds ))::bigint AS idle_seconds
FROM leaudit_documents d FROM leaudit_documents d
JOIN leaudit_audit_runs ar LEFT JOIN leaudit_audit_runs ar
ON ar.id = d.current_run_id ON ar.id = d.current_run_id
WHERE d.deleted_at IS NULL WHERE d.deleted_at IS NULL
AND d.is_latest_version = true
AND ( AND (
LOWER(COALESCE(ar.status, '')) IN ('pending', 'queued', 'running', 'retrying') LOWER(COALESCE(ar.status, '')) IN ('pending', 'queued', 'running', 'retrying')
OR LOWER(COALESCE(d.processing_status, '')) IN ('waiting', 'queued', 'running', 'processing') 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: for row in timed_out_rows:
document_id = int(row["document_id"]) 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) idle_seconds = int(row.get("idle_seconds") or 0)
run_phase = row.get("phase") run_phase = row.get("phase")
run_status = row.get("run_status") run_status = row.get("run_status")
@@ -757,23 +756,24 @@ async def _scan_and_fail_stuck_documents(*, timeout_minutes: int) -> dict[str, A
try: try:
await _update_status_safe(document_id, "failed") await _update_status_safe(document_id, "failed")
await storage.fail_run( if run_id is not None:
document_id, await storage.fail_run(
run_id=run_id, document_id,
phase=run_phase or "dispatch", run_id=run_id,
message=message, phase=run_phase or "dispatch",
detail_json={ message=message,
"reason": "stuck_timeout", detail_json={
"timeoutMinutes": timeout_minutes, "reason": "stuck_timeout",
"idleSeconds": idle_seconds, "timeoutMinutes": timeout_minutes,
"taskId": row.get("task_id"), "idleSeconds": idle_seconds,
"runStatus": run_status, "taskId": row.get("task_id"),
"processingStatus": processing_status, "runStatus": run_status,
"phase": run_phase, "processingStatus": processing_status,
"fileName": file_name, "phase": run_phase,
"region": row.get("region"), "fileName": file_name,
}, "region": row.get("region"),
) },
)
failed_items.append( failed_items.append(
{ {
"document_id": document_id, "document_id": document_id,