Module: Sidekiq::DeferredJobs::DeferBlock

Included in:
Sidekiq
Defined in:
lib/sidekiq/deferred_jobs.rb

Overview

Methods added to the Sidekiq module itself for controlling deferred jobs.

Instance Method Summary collapse

Instance Method Details

#abort_deferred_jobs!(*filter) ⇒ Array<Sidekiq::DeferredJobs::Job>

Abort any already deferred Sidekiq workers in the current defer_jobs block. If a filter is specified, then only matching Sidekiq jobs will be aborted. Does nothing if called outside of a defer_jobs block.

Parameters:

  • filter (Array<Module>, Hash)

    See #defer_jobs for filter specification. Unlike #defer_jobs, false is not a valid filter here.

Returns:



170
171
172
173
174
175
176
177
# File 'lib/sidekiq/deferred_jobs.rb', line 170

def abort_deferred_jobs!(*filter)
  jobs, _filters = Thread.current[:sidekiq_deferred_jobs_jobs]
  if jobs
    jobs.clear!(filter)
  else
    []
  end
end

#defer_jobs(*filter, &block) ⇒ Object

Defer enqueuing Sidekiq workers within the block until the end of the block. Any workers that normally would have been enqueued with a perform_async call will instead be queued up and run in an ensure clause at the end of the block.

Parameters:

  • filter (Array<Module>, Hash, false)

    Optional filter on which workers should be deferred. If a filter is specified, only matching workers will be deferred. To match the filter, the worker must either be the class specified (or a subclass of it), include the module, or have sidekiq_options that match the specified hash. Multiple filters can be specified and a worker will be deferred if it matches any of them. If the filter is false then job deferral will be disabled entirely within the block.

Returns:

  • (Object)

    the return value of the block



155
156
157
158
159
160
161
# File 'lib/sidekiq/deferred_jobs.rb', line 155

def defer_jobs(*filter, &block)
  if filter.size == 1 && filter.first == false
    Sidekiq::DeferredJobs.undeferred(&block)
  else
    Sidekiq::DeferredJobs.defer(filter, &block)
  end
end

#enqueue_deferred_jobs!(*filter) ⇒ void

This method returns an undefined value.

Immediately enqueue any already deferred Sidekiq workers in the current defer_jobs block. If a filter is specified, then only matching Sidekiq jobs will be enqueued. Does nothing if called outside of a defer_jobs block.

Parameters:

  • filter (Array<Module>, Hash)

    See #defer_jobs for filter specification. Unlike #defer_jobs, false is not a valid filter here.



186
187
188
189
190
191
192
# File 'lib/sidekiq/deferred_jobs.rb', line 186

def enqueue_deferred_jobs!(*filter)
  jobs, _filters = Thread.current[:sidekiq_deferred_jobs_jobs]
  if jobs
    Sidekiq::DeferredJobs.undeferred { jobs.enqueue!(filter) }
  end
  nil
end