Summary
When the Redis connection is interrupted after a job has been dequeued but before it is acknowledged, the job is neither retried nor moved to the dead letter queue. It is silently dropped.
Observed Behaviour
During a Redis failover (e.g., Sentinel promotion), jobs in the PROCESSING state are lost. There is no log entry, no metric, and no alert.
Expected Behaviour
- All in-flight jobs should be tracked with a heartbeat/lease mechanism
- Jobs whose leases expire should be requeued automatically
- Jobs that exceed
max_retries should be routed to the DLQ
- A
worker.job.dropped metric should be emitted
Implementation Notes
Acceptance Criteria
Summary
When the Redis connection is interrupted after a job has been dequeued but before it is acknowledged, the job is neither retried nor moved to the dead letter queue. It is silently dropped.
Observed Behaviour
During a Redis failover (e.g., Sentinel promotion), jobs in the
PROCESSINGstate are lost. There is no log entry, no metric, and no alert.Expected Behaviour
max_retriesshould be routed to the DLQworker.job.droppedmetric should be emittedImplementation Notes
backend/src/workers/Acceptance Criteria
worker.job.droppedmetric emitted and tested