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
-
.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 ⇒ Concurrent::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_body ⇒ 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
202 203 204 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 202 def Time.now.to_i end |
.disabled? ⇒ true, false
Checks if reaping is disabled
155 156 157 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 155 def disabled? !enabled? end |
.drift_reaper_interval ⇒ Object
198 199 200 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 198 def drift_reaper_interval reaper_interval + (reaper_interval * DRIFT_FACTOR).to_i end |
.enabled? ⇒ true, false
Checks if reaping is enabled
164 165 166 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 164 def enabled? REAPERS.include?(reaper) end |
.logging_context ⇒ Hash, String
A context to use for all log entries
117 118 119 120 121 122 123 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 117 def logging_context if logger_context_hash? { "uniquejobs" => "reaper" } else "uniquejobs=orphan-reaper" end end |
.reaper ⇒ Object
92 93 94 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 92 def reaper SidekiqUniqueJobs.config.reaper end |
.reaper_interval ⇒ Object
99 100 101 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 99 def reaper_interval SidekiqUniqueJobs.config.reaper_interval end |
.reaper_timeout ⇒ Object
106 107 108 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 106 def reaper_timeout SidekiqUniqueJobs.config.reaper_timeout end |
.refresh_reaper_mutex ⇒ void
This method returns an undefined value.
Updates mutex key
184 185 186 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 184 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
174 175 176 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 174 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
131 132 133 134 135 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 131 def registered? redis do |conn| conn.get(UNIQUE_REAPER).to_i + drift_reaper_interval > end end |
.start ⇒ Concurrent::TimerTask
Starts a separate thread that periodically reaps orphans
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 25 def start # rubocop:disable return if disabled? return if registered? 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
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 44 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
61 62 63 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 61 def task @task ||= Concurrent::TimerTask.new(, &task_body) end |
.task_body ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 66 def task_body @task_body ||= lambda do with_logging_context do redis do |conn| refresh_reaper_mutex Orphans::Reaper.call(conn) end end end end |
.timer_task_options ⇒ Hash
Arguments passed on to the timer task
83 84 85 86 87 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 83 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
194 195 196 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 194 def unregister_reaper_process redis { |conn| conn.del(UNIQUE_REAPER) } end |
.unregistered? ⇒ true, false
Checks if that reapers are not registerd
144 145 146 |
# File 'lib/sidekiq_unique_jobs/orphans/manager.rb', line 144 def unregistered? !registered? end |