class Dynflow::Executors::Parallel::Pool::JobStorage

Public Class Methods

new() click to toggle source
# File lib/dynflow/executors/parallel/pool.rb, line 6
def initialize
  @round_robin = RoundRobin.new
  @jobs        = Hash.new { |h, k| h[k] = [] }
end

Public Instance Methods

add(work) click to toggle source
# File lib/dynflow/executors/parallel/pool.rb, line 11
def add(work)
  @round_robin.add work.execution_plan_id unless tracked?(work)
  @jobs[work.execution_plan_id] << work
end
empty?() click to toggle source
# File lib/dynflow/executors/parallel/pool.rb, line 22
def empty?
  @jobs.empty?
end
pop() click to toggle source
# File lib/dynflow/executors/parallel/pool.rb, line 16
def pop
  return nil if empty?
  execution_plan_id = @round_robin.next
  @jobs[execution_plan_id].shift.tap { delete execution_plan_id if @jobs[execution_plan_id].empty? }
end

Private Instance Methods

delete(execution_plan_id) click to toggle source
# File lib/dynflow/executors/parallel/pool.rb, line 32
def delete(execution_plan_id)
  @round_robin.delete execution_plan_id
  @jobs.delete execution_plan_id
end
tracked?(work) click to toggle source
# File lib/dynflow/executors/parallel/pool.rb, line 28
def tracked?(work)
  @jobs.has_key? work.execution_plan_id
end