Skip to content

Commit

Permalink
Merge f797264 into 6d0a6b2
Browse files Browse the repository at this point in the history
  • Loading branch information
isra17 committed Oct 27, 2014
2 parents 6d0a6b2 + f797264 commit f4f9240
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 2 deletions.
6 changes: 6 additions & 0 deletions lib/delayed/backend/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ def work_off(num = 100)
end
end

attr_accessor :error
def error=(error)
@error = error
self.last_error = "#{error.message}\n#{error.backtrace.join("\n")}" if self.respond_to?(:last_error=)
end

def failed?
!!failed_at
end
Expand Down
3 changes: 3 additions & 0 deletions lib/delayed/backend/shared_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,7 @@ def create_job(opts = {})
Delayed::Worker.max_run_time = 1.second
job = Delayed::Job.create :payload_object => LongRunningJob.new
worker.run(job)
expect(job.reload.error).to_not be_nil
expect(job.reload.last_error).to match(/expired/)
expect(job.reload.last_error).to match(/Delayed::Worker\.max_run_time is only 1 second/)
expect(job.attempts).to eq(1)
Expand Down Expand Up @@ -535,6 +536,7 @@ def create_job(opts = {})
Delayed::Worker.max_attempts = 1
worker.run(@job)
@job.reload
expect(@job.reload.error).to_not be_nil
expect(@job.last_error).to match(/did not work/)
expect(@job.attempts).to eq(1)
expect(@job).to be_failed
Expand All @@ -543,6 +545,7 @@ def create_job(opts = {})
it 're-schedules jobs after failing' do
worker.work_off
@job.reload
expect(@job.reload.error).to_not be_nil
expect(@job.last_error).to match(/did not work/)
expect(@job.last_error).to match(/sample_jobs.rb:\d+:in `perform'/)
expect(@job.attempts).to eq(1)
Expand Down
4 changes: 2 additions & 2 deletions lib/delayed/worker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ def run(job)
job_say job, format('COMPLETED after %.4f', runtime)
return true # did work
rescue DeserializationError => error
job.last_error = "#{error.message}\n#{error.backtrace.join("\n")}"
job.error = error
failed(job)
rescue => error
self.class.lifecycle.run_callbacks(:error, self, job) { handle_failed_job(job, error) }
Expand Down Expand Up @@ -268,7 +268,7 @@ def max_run_time(job)
protected

def handle_failed_job(job, error)
job.last_error = "#{error.message}\n#{error.backtrace.join("\n")}"
job.error = error
job_say job, "FAILED (#{job.attempts} prior attempts) with #{error.class.name}: #{error.message}", 'error'
reschedule(job)
end
Expand Down

0 comments on commit f4f9240

Please sign in to comment.