Method: MiGA::Daemon#flush!
- Defined in:
- lib/miga/daemon.rb
#flush! ⇒ Object
Remove finished jobs from the internal queue and launch as many as possible respecting #maxjobs or #nodelist (if set).
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 |
# File 'lib/miga/daemon.rb', line 281 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 |