From e8e9796a733a9482455bbdf82e7b4009bdac2470 Mon Sep 17 00:00:00 2001 From: Abhinav Dhiman Date: Mon, 22 Jun 2026 23:40:52 +0530 Subject: [PATCH] fix(process-pdf-job): discard on RuntimeError and guard failed status Add discard_on(RuntimeError) to drop the job immediately instead of exhausting 25 Sidekiq retries on deterministic errors. The block logs job_id and message for observability. Widen the early-return guard from status == "complete" to also cover "failed", preventing re-processing of already-failed imports. --- app/jobs/process_pdf_job.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/jobs/process_pdf_job.rb b/app/jobs/process_pdf_job.rb index c577806dc0..3a80b9e764 100644 --- a/app/jobs/process_pdf_job.rb +++ b/app/jobs/process_pdf_job.rb @@ -1,10 +1,14 @@ class ProcessPdfJob < ApplicationJob queue_as :medium_priority + discard_on(RuntimeError) do |job, err| + Rails.logger.error("[ProcessPdfJob] Discarded permanently (job_id=#{job.job_id}): #{err.message}") + end + def perform(pdf_import) return unless pdf_import.is_a?(PdfImport) return reset_processing_claim(pdf_import) unless pdf_import.pdf_uploaded? - return if pdf_import.status == "complete" + return if pdf_import.status.in?(%w[complete failed]) return reset_processing_claim(pdf_import) if pdf_import.ai_processed? && (!pdf_import.statement_with_transactions? || pdf_import.rows_count > 0) pdf_import.update!(status: :importing)