Module: SidekiqUniqueJobs::Orphans::Manager
- Defined in:
- lib/sidekiq_unique_jobs/orphans/manager.rb
Overview
Manages the orphan reaper
Constant Summary collapse
- DRIFT_FACTOR =
0.02
- REAPERS =
[:ruby, :lua].freeze
Class Method Summary collapse
- .current_timestamp ⇒ Object
- .default_task ⇒ Object
-
.disabled? ⇒ true, false
Checks if reaping is disabled.
- .drift_reaper_interval ⇒ Object
-
.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) ⇒ Object
-
.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 ⇒ Object
208 209 210 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 208 def Time.now.to_i end |
.default_task ⇒ Object
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 68 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
161 162 163 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 161 def disabled? !enabled? end |
.drift_reaper_interval ⇒ Object
204 205 206 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 204 def drift_reaper_interval reaper_interval + (reaper_interval * DRIFT_FACTOR).to_i end |
.enabled? ⇒ true, false
Checks if reaping is enabled
170 171 172 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 170 def enabled? REAPERS.include?(reaper) end |
.logging_context ⇒ Hash, String
A context to use for all log entries
123 124 125 126 127 128 129 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 123 def logging_context if logger_context_hash? { "uniquejobs" => "reaper" } else "uniquejobs=orphan-reaper" end end |
.reaper ⇒ Object
98 99 100 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 98 def reaper SidekiqUniqueJobs.config.reaper end |
.reaper_interval ⇒ Object
105 106 107 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 105 def reaper_interval SidekiqUniqueJobs.config.reaper_interval end |
.reaper_timeout ⇒ Object
112 113 114 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 112 def reaper_timeout SidekiqUniqueJobs.config.reaper_timeout end |
.refresh_reaper_mutex ⇒ void
This method returns an undefined value.
Updates mutex key
190 191 192 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 190 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
180 181 182 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 180 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
137 138 139 140 141 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 137 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
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 25 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
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 47 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
64 65 66 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 64 def task @task ||= default_task end |
.task=(task) ⇒ Object
79 80 81 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 79 def task=(task) @task = task end |
.timer_task_options ⇒ Hash
Arguments passed on to the timer task
89 90 91 92 93 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 89 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
200 201 202 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 200 def unregister_reaper_process redis { |conn| conn.del(UNIQUE_REAPER) } end |
.unregistered? ⇒ true, false
Checks if that reapers are not registerd
150 151 152 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 150 def unregistered? !registered? end |