class Sidekiq::DeferredJobs::Jobs
Class for holding deferred jobs.
Public Class Methods
new()
click to toggle source
# File lib/sidekiq/deferred_jobs.rb, line 165 def initialize @jobs = [] end
Public Instance Methods
clear!(filters = nil)
click to toggle source
Clear any deferred jobs that match the filter. @filter [Array<Module>, Array<Hash>] Filter
for jobs to clear
# File lib/sidekiq/deferred_jobs.rb, line 179 def clear!(filters = nil) filter = Filter.new(filters) cleared_jobs = @jobs.select { |job| filter.match?(job.klass, job.opts) } @jobs -= cleared_jobs cleared_jobs end
defer(klass, args, opts = nil)
click to toggle source
Add a job to the deferred job list. @param klass [Class] Sidekiq
worker class. @param args [Array] Sidekiq
job arguments @param opts [Hash, Nil] optional runtime jobs options
# File lib/sidekiq/deferred_jobs.rb, line 173 def defer(klass, args, opts = nil) @jobs << Job.new(klass, args&.dup, opts&.dup) end
enqueue!(filters = nil)
click to toggle source
Enqueue any deferred jobs that match the filter. @filter [Array<Module>, Array<Hash>] Filter
for jobs to clear
# File lib/sidekiq/deferred_jobs.rb, line 188 def enqueue!(filters = nil) filter = Filter.new(filters) remaining_jobs = [] begin duplicates = Set.new @jobs.each do |job| if filter.match?(job.klass, job.opts) if unique_job?(job.klass, job.opts) next if duplicates.include?([job.klass, job.args]) duplicates << [job.klass, job.args] end if job.opts job.klass.set(job.opts).perform_async(*job.args) else job.klass.perform_async(*job.args) end else remaining_jobs << job end end ensure @jobs = remaining_jobs end end
Private Instance Methods
unique_job?(klass, opts)
click to toggle source
@return [Boolean] true if the worker support a uniqueness constraint
# File lib/sidekiq/deferred_jobs.rb, line 216 def unique_job?(klass, opts) enterprise_option = worker_options(klass, opts)["unique_for"] if defined?(Sidekiq::Enterprise) unique_jobs_option = worker_options(klass, opts)["lock"] if defined?(SidekiqUniqueJobs) if enterprise_option true elsif unique_jobs_option unique_jobs_option.to_s != "while_executing" else false end end
worker_options(klass, opts)
click to toggle source
Merge runtime options with the worker class sidekiq_options.
# File lib/sidekiq/deferred_jobs.rb, line 230 def worker_options(klass, opts) if opts klass.sidekiq_options.merge(opts.transform_keys(&:to_s)) else klass.sidekiq_options end end