module Delayed::Backend::Base

Constants

ParseObjectFromYaml

Attributes

error[R]

Public Class Methods

included(base) click to toggle source
# File lib/delayed/backend/base.rb, line 4
def self.included(base)
  base.extend ClassMethods
end

Public Instance Methods

destroy_failed_jobs?() click to toggle source
# File lib/delayed/backend/base.rb, line 143
def destroy_failed_jobs?
  payload_object.respond_to?(:destroy_failed_jobs?) ? payload_object.destroy_failed_jobs? : Delayed::Worker.destroy_failed_jobs
rescue DeserializationError
  Delayed::Worker.destroy_failed_jobs
end
error=(error) click to toggle source
# File lib/delayed/backend/base.rb, line 48
def error=(error)
  @error = error
  self.last_error = "#{error.message}\n#{error.backtrace.join("\n")}" if respond_to?(:last_error=)
end
fail!() click to toggle source
# File lib/delayed/backend/base.rb, line 149
def fail!
  self.failed_at = self.class.db_time_now
  save!
end
failed()
Alias for: failed?
failed?() click to toggle source
# File lib/delayed/backend/base.rb, line 53
def failed?
  !!failed_at
end
Also aliased as: failed
hook(name, *args) click to toggle source
# File lib/delayed/backend/base.rb, line 106
def hook(name, *args)
  if payload_object.respond_to?(name)
    if payload_object.is_a?(Delayed::JobWrapper)
      return if name == :enqueue # this callback is not supported due to method naming conflicts.

      warn '[DEPRECATION] Job hook methods (`before`, `after`, `success`, etc) are deprecated. Use ActiveJob callbacks instead.'
    end

    method = payload_object.method(name)
    method.arity.zero? ? method.call : method.call(self, *args)
  end
rescue DeserializationError
end
invoke_job() click to toggle source
# File lib/delayed/backend/base.rb, line 87
def invoke_job
  Delayed::Worker.lifecycle.run_callbacks(:invoke_job, self) do
    hook :before
    payload_object.perform
    hook :success
  rescue Exception => e # rubocop:disable Lint/RescueException
    hook :error, e
    raise e
  ensure
    hook :after
  end
end
max_attempts() click to toggle source
# File lib/delayed/backend/base.rb, line 128
def max_attempts
  payload_object.max_attempts if payload_object.respond_to?(:max_attempts)
end
max_run_time() click to toggle source
# File lib/delayed/backend/base.rb, line 132
def max_run_time
  return unless payload_object.respond_to?(:max_run_time)
  return unless (run_time = payload_object.max_run_time)

  if run_time > Delayed::Worker.max_run_time
    Delayed::Worker.max_run_time
  else
    run_time
  end
end
name() click to toggle source
# File lib/delayed/backend/base.rb, line 60
def name # rubocop:disable Metrics/AbcSize
  @name ||= payload_object.job_data['job_class'] if payload_object.respond_to?(:job_data)
  @name ||= payload_object.display_name if payload_object.respond_to?(:display_name)
  @name ||= payload_object.class.name
rescue DeserializationError
  ParseObjectFromYaml.match(handler)[1]
end
payload_object() click to toggle source
# File lib/delayed/backend/base.rb, line 81
def payload_object
  @payload_object ||= YAML.load_dj(handler)
rescue TypeError, LoadError, NameError, ArgumentError, SyntaxError, Psych::SyntaxError => e
  raise DeserializationError, "Job failed to load: #{e.message}. Handler: #{handler.inspect}"
end
payload_object=(object) click to toggle source
# File lib/delayed/backend/base.rb, line 76
def payload_object=(object)
  @payload_object = object
  self.handler = YAML.dump_dj(object)
end
priority() click to toggle source
Calls superclass method
# File lib/delayed/backend/base.rb, line 68
def priority
  Priority.new(super)
end
priority=(value) click to toggle source
Calls superclass method
# File lib/delayed/backend/base.rb, line 72
def priority=(value)
  super(Priority.new(value))
end
reschedule_at() click to toggle source
# File lib/delayed/backend/base.rb, line 120
def reschedule_at
  if payload_object.respond_to?(:reschedule_at)
    payload_object.reschedule_at(self.class.db_time_now, attempts)
  else
    self.class.db_time_now + (attempts**4) + 5
  end
end
unlock() click to toggle source

Unlock this job (note: not saved to DB)

# File lib/delayed/backend/base.rb, line 101
def unlock
  self.locked_at    = nil
  self.locked_by    = nil
end

Protected Instance Methods

reset() click to toggle source

Call during reload operation to clear out internal state

# File lib/delayed/backend/base.rb, line 161
def reset
  @payload_object = nil
end
set_default_run_at() click to toggle source
# File lib/delayed/backend/base.rb, line 156
def set_default_run_at
  self.run_at ||= self.class.db_time_now
end