diff --git a/lib/delayed/lifecycle.rb b/lib/delayed/lifecycle.rb index 451570e31..18b7229c9 100644 --- a/lib/delayed/lifecycle.rb +++ b/lib/delayed/lifecycle.rb @@ -8,5 +8,14 @@ def self.set_callback name, *args, &block Delayed::Worker.set_callback name, *args, &block end end + + def self.skip_callback name, *args, &block + case name + when :enqueue + Delayed::Job.skip_callback name, *args, &block + else + Delayed::Worker.skip_callback name, *args, &block + end + end end end \ No newline at end of file diff --git a/lib/delayed/worker.rb b/lib/delayed/worker.rb index 0542068c6..6704c613b 100644 --- a/lib/delayed/worker.rb +++ b/lib/delayed/worker.rb @@ -72,7 +72,7 @@ def self.after_fork end define_callbacks :execute, :loop, :perform, :error, :failure - + def initialize(options={}) @quiet = options.has_key?(:quiet) ? options[:quiet] : true self.class.min_priority = options[:min_priority] if options.has_key?(:min_priority) @@ -96,6 +96,8 @@ def name=(val) @name = val end + set_callback :execute, :around, :clear_locks + def start say "Starting job worker" @@ -125,8 +127,6 @@ def start break if $exit end end - ensure - Delayed::Job.clear_locks!(name) end # Do num jobs and return stats on success/failure. @@ -211,6 +211,12 @@ def reserve_and_run_one_job run_callbacks(:perform){ result = run(job) } if job result end + + def clear_locks + yield + ensure + Delayed::Job.clear_locks!(name) + end end end