class Swarm::Engine::Volatile::Queue

Constants

Tube

Attributes

name[R]
tube[R]

Public Class Methods

get_tube(name) click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 19
def get_tube(name)
  tubes[name] ||= Tube.new([], [])
end
new(name:) click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 24
def initialize(name:)
  @name = name
  @tube = self.class.get_tube(name)
end
tubes() click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 15
def tubes
  @tubes ||= {}
end

Public Instance Methods

add_job(data) click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 34
def add_job(data)
  new_job = Job.new(queue: self, data: data)
  jobs << new_job
  new_job
end
add_worker(worker) click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 75
def add_worker(worker)
  workers << worker
end
clear() click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 67
def clear
  tube.jobs = []
end
delete_job(job_to_delete) click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 59
def delete_job(job_to_delete)
  jobs.delete_if { |job| job == job_to_delete }
end
has_job?(job_to_find) click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 63
def has_job?(job_to_find)
  jobs.any? { |job| job == job_to_find }
end
idle?() click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 79
def idle?
  jobs.empty?
end
prepare_for_work(worker) click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 29
def prepare_for_work(worker)
  add_worker(worker) unless workers.include?(worker)
  self
end
reserve_job(worker) click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 48
def reserve_job(worker)
  wait_for_job
  index = jobs.index { |job| job.available? }
  raise JobNotFoundError unless index
  job = jobs[index]
  job.reserve!(worker)
  job
rescue JobNotFoundError, Job::AlreadyReservedError
  raise JobReservationFailed
end
wait_for_job() click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 40
def wait_for_job
  delay_time = 0
  until jobs.count > 0
    delay_time += 0.01 unless delay_time > 1.0
    sleep(delay_time)
  end
end
worker_count() click to toggle source
# File lib/swarm/engine/volatile/queue.rb, line 71
def worker_count
  workers.count
end