* fix: resolve consolidation deadlock caused by zombie 'processing' tasks on retry When a task failed and was rescheduled for retry, submit_task() only updated task_payload without resetting status/worker_id/claimed_at. The task stayed permanently in 'processing', blocking all future consolidation for that bank via the NOT EXISTS guard in claim_batch(). Fix: remove the duplicate payload-based retry mechanism from execute_task(). Retryable failures now re-raise so the poller handles them via _retry_or_fail(), which already correctly resets status='pending', worker_id=NULL, claimed_at=NULL and uses the DB retry_count column as single source of truth. Non-retryable tasks (file_convert_retain) continue to mark themselves failed and return normally — no exception reaches the poller. Tests: add regression tests for the retry path (status reset to pending) and the max-retries exhaustion path (status set to failed). * ci: re-trigger CI |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| main.py | ||
| poller.py | ||