module SidekiqUniqueJobs::Orphans::ReaperResurrector

Restarts orphan manager if it is considered dead

Constants

DRIFT_FACTOR
REAPERS

Public Instance Methods

current_timestamp() click to toggle source
# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 165
def current_timestamp
  Time.now.to_i
end
drift_reaper_interval() click to toggle source
# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 161
def drift_reaper_interval
  reaper_interval + (reaper_interval * DRIFT_FACTOR).to_i
end
logging_context() click to toggle source

A context to use for all log entries

@return [Hash] when logger responds to `:with_context` @return [String] when logger does not responds to `:with_context`

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 142
def logging_context
  if logger_context_hash?
    { "uniquejobs" => "reaper-resurrector" }
  else
    "uniquejobs=reaper-resurrector"
  end
end
orphans_manager() click to toggle source

Returns orphan manager

@return [SidekiqUniqueJobs::Orphans::Manager]

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 65
def orphans_manager
  SidekiqUniqueJobs::Orphans::Manager
end
reaper() click to toggle source

@see SidekiqUniqueJobs::Config#reaper

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 120
def reaper
  SidekiqUniqueJobs.config.reaper
end
reaper_disabled?() click to toggle source

Checks if reaping is disabled

@see reaper_enabled?

@return [true, false]

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 94
def reaper_disabled?
  !reaper_enabled?
end
reaper_enabled?() click to toggle source

Checks if reaping is enabled

@return [true, false]

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 103
def reaper_enabled?
  REAPERS.include?(reaper)
end
reaper_interval() click to toggle source
# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 157
def reaper_interval
  SidekiqUniqueJobs.config.reaper_interval
end
reaper_registered?() click to toggle source

Checks if reaper is registered

@return [true, false]

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 111
def reaper_registered?
  redis do |conn|
    conn.get(UNIQUE_REAPER).to_i + drift_reaper_interval > current_timestamp
  end
end
reaper_resurrector_interval() click to toggle source

@see SidekiqUniqueJobs::Config#reaper_resurrector_interval

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 153
def reaper_resurrector_interval
  SidekiqUniqueJobs.config.reaper_resurrector_interval
end
restart_if_dead() click to toggle source

Starts new instance of orphan reaper if reaper is considered dead (reaper mutex has not been refreshed lately)

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 54
def restart_if_dead
  return if reaper_registered?

  log_info("Reaper is considered dead. Starting new reaper instance")
  orphans_manager.start
end
resurrector_disabled?() click to toggle source

Checks if resurrector is disabled

@see resurrector_enabled?

@return [true, false]

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 75
def resurrector_disabled?
  !resurrector_enabled?
end
resurrector_enabled?() click to toggle source

Checks if resurrector is enabled

@return [true, false]

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 83
def resurrector_enabled?
  SidekiqUniqueJobs.config.reaper_resurrector_enabled
end
run_task() click to toggle source

Runs reaper resurrector task

@return [SidekiqUniqueJobs::TimerTask]

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 33
def run_task
  log_info("Starting Reaper Resurrector")
  task.execute
  task
end
start() click to toggle source

Starts reaper resurrector that watches orphans reaper

@return [SidekiqUniqueJobs::TimerTask] the task that was started

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 20
def start
  return if resurrector_disabled?
  return if reaper_disabled?

  with_logging_context do
    run_task
  end
end
task() click to toggle source

The task that runs the resurrector

@return [SidekiqUniqueJobs::TimerTask]

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 43
def task
  SidekiqUniqueJobs::TimerTask.new(timer_task_options) do
    with_logging_context do
      restart_if_dead
    end
  end
end
timer_task_options() click to toggle source

Arguments passed on to the timer task

@return [Hash]

# File lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb, line 130
def timer_task_options
  { run_now: false,
    execution_interval: reaper_resurrector_interval }
end