# File lib/dynflow/executors/parallel/pool.rb, line 6 def initialize @round_robin = RoundRobin.new @jobs = Hash.new { |h, k| h[k] = [] } end
# 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
# File lib/dynflow/executors/parallel/pool.rb, line 22 def empty? @jobs.empty? end
# 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
# 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
# File lib/dynflow/executors/parallel/pool.rb, line 28 def tracked?(work) @jobs.has_key? work.execution_plan_id end