Sha256: 59591dea080dd9c5bab1a20540a2c1bc06c192872dc6e3fd0d482d2d5e667feb

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

module Resque
  class Job
    class <<self
      alias_method :origin_reserve, :reserve

      def reserve(queue)
        if queue =~ /^#{Plugins::Restriction::RESTRICTION_QUEUE_PREFIX}/
          # If processing the restriction queue, when poping and pushing to end,
          # we can't tell when we reach the original one, so just walk the length
          # of the queue or up to max_queue_peek so we don't run infinitely long
          [Resque.size(queue), Restriction.config.max_queue_peek(queue)].compact.min.times do
            # For the job at the head of the queue, repush to restricition queue
            # if still restricted, otherwise we have a runnable job, so create it
            # and return
            payload = Resque.pop(queue)
            if payload
              if !Object.const_get(payload['class']).repush(*payload['args'])
                return new(queue, payload)
              end
            end
          end
          nil
        else
          # drop through to original Job::Reserve if not restriction queue
          origin_reserve(queue)
        end
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
resque-restriction-0.7.0 lib/resque/plugins/job.rb