class MiGA::Daemon
def flush!
Remove finished jobs from the internal queue and launch as many as
#
def flush! # Check for finished jobs l_say(2, 'Checking for finished jobs') @jobs_running.select! do |job| ongoing = case job[:job].to_s when 'd' !job[:ds].nil? && !job[:ds].next_preprocessing(false).nil? when 'p' !project.next_task(nil, false).nil? else (job[:ds].nil? ? project : job[:ds]).add_result(job[:job], false).nil? end say "Completed pid:#{job[:pid]} for #{job[:task_name]}" unless ongoing ongoing end # Avoid single datasets hogging resources @jobs_to_run.rotate! rand(jobs_to_run.size) # Prioritize: Project-wide > MiGA Online queries > Other datasets @jobs_to_run.sort_by! do |job| job[:ds].nil? ? 1 : job[:ds_name] =~ /^qG_/ ? 2 : 3 end # Launch as many +jobs_to_run+ as possible while (hostk = next_host) break if jobs_to_run.empty? launch_job(@jobs_to_run.shift, hostk) end end