class Rjob::Scripts::EnqueueScheduledJobs

Public Instance Methods

arg_params() click to toggle source
# File lib/rjob/scripts/enqueue_scheduled_jobs.rb, line 4
def arg_params
  %i(time_now job_limit bucket_no)
end
key_params() click to toggle source
# File lib/rjob/scripts/enqueue_scheduled_jobs.rb, line 8
def key_params
  %i(scheduled_key dest_key jobs_key)
end
lua_script() click to toggle source
# File lib/rjob/scripts/enqueue_scheduled_jobs.rb, line 12
  def lua_script
    <<~LUA
      local r = redis
      local time_now = ARGV[1]
      local job_limit = ARGV[2]
      local bucket_no = ARGV[3]

      local scheduled_key = KEYS[1]
      local dest_key = KEYS[2]
      local jobs_key = KEYS[3]

      local jobs = r.call('zrangebyscore', scheduled_key, 0, time_now, 'limit', 0, job_limit)
      if #jobs == 0 then
        return 0
      end

      local i
      for i=1, #jobs do
        r.call('lpush', dest_key, jobs[i])
      end
      r.call('zrem', scheduled_key, unpack(jobs))
      r.call('publish', jobs_key, bucket_no)

      return #jobs
    LUA
  end