def worker_shutdown
if not @masters_dead
workers_to_kill = active_workers.select do |w|
w.map_or_reduce == "master" and active_workers.detect{|status| status.process_id == w.process_id and worker_alive?(w.process_id)}
end
warn "Shutting down masters. #{worker_pids.size} workers still running." if worker_pids.size > 0
worker_pids_to_kill = workers_to_kill.collect { |w| w.process_id }
if worker_pids_to_kill and not worker_pids_to_kill.empty?
warn "FOUND MORE RUNNING MASTERS WE HAVEN'T KILLED:", worker_pids_to_kill
remove_worker(worker_pids_to_kill)
end
if not active_workers.detect { |w| w.map_or_reduce == "master" }
signal_workers("TERM")
@masters_dead = true
else
return check_number_of_workers
end
end
if worker_pids.size < 1
info "No more workers running."
else
warn "Shutting down. #{worker_pids.size} workers still running." if worker_pids.size > 0
end
end