Module: SidekiqUniqueJobs::Orphans::Manager
- Defined in:
- lib/sidekiq_unique_jobs/orphans/manager.rb
Overview
Manages the orphan reaper
Constant Summary collapse
- DRIFT_FACTOR =
Returns the amount to add to the reaper interval.
0.02
- REAPERS =
Returns allowed reapers (:ruby or :lua).
[:ruby, :lua].freeze
Class Method Summary collapse
-
.current_timestamp ⇒ Integer
Current time (as integer value).
-
.default_task ⇒ SidekiqUniqueJobs::TimerTask
A properly configured timer task.
-
.disabled? ⇒ true, false
Checks if reaping is disabled.
-
.drift_reaper_interval ⇒ Integer
Reaper interval with a little drift Redis isn’t exact enough so to give a little bufffer, we add a tiny value to the reaper interval.
-
.enabled? ⇒ true, false
Checks if reaping is enabled.
-
.logging_context ⇒ Hash, String
A context to use for all log entries.
- .reaper ⇒ Object
- .reaper_interval ⇒ Object
- .reaper_timeout ⇒ Object
-
.refresh_reaper_mutex ⇒ void
Updates mutex key.
-
.register_reaper_process ⇒ void
Writes a mutex key to redis.
-
.registered? ⇒ true, false
Checks if a reaper is registered.
-
.start(test_task = nil) ⇒ SidekiqUniqueJobs::TimerTask
Starts a separate thread that periodically reaps orphans.
-
.stop ⇒ Boolean
Stops the thread that reaps orphans.
-
.task ⇒ <type>
The task that runs the reaper.
-
.task=(task) ⇒ void
Store a task to use for scheduled execution.
-
.timer_task_options ⇒ Hash
Arguments passed on to the timer task.
-
.unregister_reaper_process ⇒ void
Removes mutex key from redis.
-
.unregistered? ⇒ true, false
Checks if that reapers are not registerd.
Class Method Details
.current_timestamp ⇒ Integer
Current time (as integer value)
243 244 245 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 243 def Time.now.to_i end |
.default_task ⇒ SidekiqUniqueJobs::TimerTask
A properly configured timer task
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 82 def default_task SidekiqUniqueJobs::TimerTask.new() do with_logging_context do redis do |conn| refresh_reaper_mutex Orphans::Reaper.call(conn) end end end end |
.disabled? ⇒ true, false
Checks if reaping is disabled
182 183 184 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 182 def disabled? !enabled? end |
.drift_reaper_interval ⇒ Integer
Reaper interval with a little drift
Redis isn't exact enough so to give a little bufffer,
we add a tiny value to the reaper interval.
233 234 235 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 233 def drift_reaper_interval reaper_interval + (reaper_interval * DRIFT_FACTOR).to_i end |
.enabled? ⇒ true, false
Checks if reaping is enabled
191 192 193 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 191 def enabled? REAPERS.include?(reaper) end |
.logging_context ⇒ Hash, String
A context to use for all log entries
144 145 146 147 148 149 150 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 144 def logging_context if logger_context_hash? { "uniquejobs" => "reaper" } else "uniquejobs=orphan-reaper" end end |
.reaper ⇒ Object
119 120 121 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 119 def reaper SidekiqUniqueJobs.config.reaper end |
.reaper_interval ⇒ Object
126 127 128 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 126 def reaper_interval SidekiqUniqueJobs.config.reaper_interval end |
.reaper_timeout ⇒ Object
133 134 135 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 133 def reaper_timeout SidekiqUniqueJobs.config.reaper_timeout end |
.refresh_reaper_mutex ⇒ void
This method returns an undefined value.
Updates mutex key
211 212 213 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 211 def refresh_reaper_mutex redis { |conn| conn.set(UNIQUE_REAPER, , ex: drift_reaper_interval) } end |
.register_reaper_process ⇒ void
This method returns an undefined value.
Writes a mutex key to redis
201 202 203 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 201 def register_reaper_process redis { |conn| conn.set(UNIQUE_REAPER, , nx: true, ex: drift_reaper_interval) } end |
.registered? ⇒ true, false
Checks if a reaper is registered
158 159 160 161 162 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 158 def registered? redis do |conn| conn.get(UNIQUE_REAPER).to_i + drift_reaper_interval > end end |
.start(test_task = nil) ⇒ SidekiqUniqueJobs::TimerTask
Starts a separate thread that periodically reaps orphans
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 33 def start(test_task = nil) # rubocop:disable return if disabled? return if registered? self.task = test_task || default_task with_logging_context do register_reaper_process log_info("Starting Reaper") task.add_observer(Observer.new) task.execute task end end |
.stop ⇒ Boolean
Stops the thread that reaps orphans
55 56 57 58 59 60 61 62 63 64 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 55 def stop return if disabled? return if unregistered? with_logging_context do log_info("Stopping Reaper") unregister_reaper_process task.shutdown end end |
.task ⇒ <type>
The task that runs the reaper
72 73 74 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 72 def task @task ||= default_task end |
.task=(task) ⇒ void
This method returns an undefined value.
Store a task to use for scheduled execution
100 101 102 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 100 def task=(task) @task = task end |
.timer_task_options ⇒ Hash
Arguments passed on to the timer task
110 111 112 113 114 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 110 def { run_now: true, execution_interval: reaper_interval, timeout_interval: reaper_timeout } end |
.unregister_reaper_process ⇒ void
This method returns an undefined value.
Removes mutex key from redis
221 222 223 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 221 def unregister_reaper_process redis { |conn| conn.del(UNIQUE_REAPER) } end |
.unregistered? ⇒ true, false
Checks if that reapers are not registerd
171 172 173 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 171 def unregistered? !registered? end |