lib/backburner/worker.rb in backburner-allq-1.0.44 vs lib/backburner/worker.rb in backburner-allq-1.0.45
- old
+ new
@@ -159,22 +159,47 @@
job.process
log_job_end(job.name)
rescue Backburner::Job::JobFormatInvalid => e
log_error exception_message(e)
rescue StandardError => e # Error occurred processing job
+ log_error "Exception during process"
log_error exception_message(e) unless e.is_a?(Backburner::Job::RetryJob)
unless job
log_error 'Error occurred before we were able to assign a job. Giving up without retrying!'
return
end
+ handle_failure_for_job(job)
+
handle_error(e, job.name, job.args, job)
end
else
sleep(rand * 3)
end
job
+ end
+
+
+ def handle_failure_for_job(job)
+ log_error "Handle failure for job"
+
+ num_retries = job.task.releases
+ max_job_retries = resolve_max_job_retries(job.job_class)
+
+ retry_status = "failed: attempt #{num_retries+1} of #{max_job_retries+1}"
+
+ if num_retries < max_job_retries # retry again
+ retry_delay = resolve_retry_delay(job.job_class)
+ delay = resolve_retry_delay_proc(job.job_class).call(retry_delay, num_retries) rescue retry_delay
+log_error("Delay should be #{delay}")
+ job.retry(num_retries + 1, delay)
+ log_job_end(job.name, "#{retry_status}, retrying in #{delay}s") if job_started_at
+ else # retries failed, bury
+ job.bury
+ log_job_end(job.name, "#{retry_status}, burying") if job_started_at
+ end
+
end
protected
# Return a new connection instance