delayed_jobs_ensure_active_job_lock_removal.rb 886 B

1234567891011121314151617181920212223242526272829
  1. require 'delayed_job'
  2. module Delayed
  3. class Job < ::ActiveRecord::Base
  4. after_destroy :remove_active_job_lock
  5. def remove_active_job_lock
  6. # only ActiveJob Delayed::Jobs can have a lock
  7. return if !payload_object.is_a?(::ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper)
  8. # deserialize ActiveJob and load it's arguments to generate the lock_key
  9. active_job = ::ActiveJob::Base.deserialize(payload_object.job_data)
  10. # ActiveJob that is not an HasActiveJobLock has no lock
  11. return if !active_job.is_a?(HasActiveJobLock)
  12. begin
  13. active_job.arguments = ::ActiveJob::Arguments.deserialize(active_job.instance_variable_get(:@serialized_arguments))
  14. rescue => e
  15. active_job.arguments = nil
  16. Rails.logger.error e
  17. end
  18. # remove possible lock
  19. active_job.release_active_job_lock!
  20. end
  21. end
  22. end