lib/fasten/runner.rb in fasten-0.8.0 vs lib/fasten/runner.rb in fasten-0.8.4
- old
+ new
@@ -176,21 +176,21 @@
ui.force_clear
end
end
def show_error_tasks
- task_error_list.each do |task|
+ tasks.failed.each do |task|
log_info "task: #{task} error:#{task.error}\n#{task.error&.backtrace&.join("\n")}"
end
end
def raise_error_in_failure
return unless tasks.failed?
show_error_tasks
- message = "Stopping because the following tasks failed: #{task_error_list.map(&:to_s).join(', ')}"
+ message = "Stopping because the following tasks failed: #{tasks.failed.map(&:to_s).join(', ')}"
if developer
ui.cleanup
puts message
@@ -203,22 +203,24 @@
raise message
end
end
def remove_workers_as_needed
- while workers.count > jobs
- return unless (worker = workers.find { |item| item.running_task.nil? })
+ workers.group_by(&:class).each do |_clazz, worker_list|
+ while worker_list.count > jobs
+ break unless (worker = workers.find { |item| item.running_task.nil? })
- worker.kill
- workers.delete worker
+ worker.kill
+ workers.delete worker
- ui.force_clear
+ ui.force_clear
+ end
end
end
- def find_or_create_worker
- worker = workers.find { |item| item.running_task.nil? }
+ def find_or_create_worker(worker_class: )
+ worker = workers.find { |item| item.class == worker_class && item.running_task.nil? }
unless worker
@worker_id = (@worker_id || 0) + 1
worker = worker_class.new runner: self, name: "#{worker_class.to_s.gsub('::', '-')}-#{format '%02X', @worker_id}", use_threads: use_threads
worker.start
@@ -232,12 +234,16 @@
worker
end
def dispatch_pending_tasks
while tasks.waiting? && tasks.running.count < jobs
- worker = find_or_create_worker
-
task = tasks.next
+
+ task_worker_class = task.worker_class || worker_class
+ task_worker_class = Object.const_get(task_worker_class) if task_worker_class.is_a? String
+
+ worker = find_or_create_worker worker_class: task_worker_class
+
log_ini task, "on worker #{worker}"
worker.send_request_to_child(task)
tasks.running << task
ui.force_clear