lib/cloud_crowd/models/work_unit.rb in cloud-crowd-0.6.1 vs lib/cloud_crowd/models/work_unit.rb in cloud-crowd-0.6.2
- old
+ new
@@ -52,21 +52,20 @@
return unless reservation = WorkUnit.reserve_available(:limit => RESERVATION_LIMIT, :conditions => filter)
work_units = WorkUnit.reserved(reservation)
# Round robin through the nodes and units, sending the unit if the node
# is able to process it.
- while (node = available_nodes.shift) && (unit = work_units.shift) do
- if node.actions.include?(unit.action)
- if node.send_work_unit(unit)
- available_nodes.push(node) unless node.busy?
- next
+ work_units.each do |unit|
+ available_nodes.each do |node|
+ if node.actions.include? unit.action
+ if node.send_work_unit unit
+ work_units.delete unit
+ available_nodes.delete node if node.busy?
+ break
+ end
end
end
- work_units.push(unit)
end
-
- # If there are both units and nodes left over, try again.
- next if work_units.any? && available_nodes.any?
# If we still have units at this point, or we're fresh out of nodes,
# that means we're done.
return if work_units.any? || available_nodes.empty?
end