diff --git a/app/models/miq_server/worker_management/process.rb b/app/models/miq_server/worker_management/process.rb index 6b6be61c493..6ff7daa7666 100644 --- a/app/models/miq_server/worker_management/process.rb +++ b/app/models/miq_server/worker_management/process.rb @@ -1,15 +1,28 @@ class MiqServer::WorkerManagement::Process < MiqServer::WorkerManagement def sync_from_system require "sys/proctable" - self.miq_processes = Sys::ProcTable.ps.select { |proc| proc.ppid == my_server.pid } + self.miq_processes = Sys::ProcTable.ps.select { |proc| proc.ppid == my_server.pid } + self.miq_processes_by_pid = miq_processes.index_by(&:pid) end def sync_starting_workers - MiqWorker.find_all_starting.to_a + sync_from_system + starting = MiqWorker.find_all_starting + starting.where(:pid => miq_processes_by_pid.keys) + .reject(&:rails_worker?) + .each { |w| w.update!(:status => MiqWorker::STATUS_STARTED) } + + starting.reload.to_a end def sync_stopping_workers - MiqWorker.find_all_stopping.to_a + sync_from_system + stopping = MiqWorker.find_all_stopping + stopping.where(:pid => miq_processes_by_pid.keys) + .reject(&:rails_worker?) + .each { |w| w.update!(:status => MiqWorker::STATUS_STOPPED) } + + stopping.reload.to_a end def monitor_workers @@ -74,5 +87,5 @@ def validate_worker(worker) private - attr_accessor :miq_processes + attr_accessor :miq_processes, :miq_processes_by_pid end