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