From 217068ba0305b9e2ab2f42140bd3c5d84035697a Mon Sep 17 00:00:00 2001 From: Adam Grare Date: Thu, 8 Aug 2024 12:01:45 -0400 Subject: [PATCH] Move non-rails sync into a method --- app/models/miq_server/worker_management.rb | 8 ++++ .../miq_server/worker_management/process.rb | 30 ++++++++---- .../miq_server/worker_management/systemd.rb | 46 ++++++++++++------- 3 files changed, 57 insertions(+), 27 deletions(-) diff --git a/app/models/miq_server/worker_management.rb b/app/models/miq_server/worker_management.rb index fa87fc6e584..e7e7cfca827 100644 --- a/app/models/miq_server/worker_management.rb +++ b/app/models/miq_server/worker_management.rb @@ -90,4 +90,12 @@ def remove_workers(workers) end miq_workers.reload end + + private + + def sync_starting_rails_workers + end + + def sync_stopping_rails_workers + end end diff --git a/app/models/miq_server/worker_management/process.rb b/app/models/miq_server/worker_management/process.rb index e83c4c9d486..1d07beab1fe 100644 --- a/app/models/miq_server/worker_management/process.rb +++ b/app/models/miq_server/worker_management/process.rb @@ -7,22 +7,18 @@ def sync_from_system def sync_starting_workers 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) } + sync_starting_rails_workers + sync_starting_non_rails_workers - starting.reload + MiqWorker.find_all_starting.to_a end def sync_stopping_workers 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) } + sync_stopping_rails_workers + sync_stopping_non_rails_workers - stopping.reload + MiqWorker.find_all_stopping.to_a end def monitor_workers @@ -88,4 +84,18 @@ def validate_worker(worker) private attr_accessor :miq_processes, :miq_processes_by_pid + + def sync_starting_non_rails_workers + starting = MiqWorker.find_all_starting + starting.where(:pid => miq_processes_by_pid.keys) + .reject(&:rails_worker?) + .each { |w| w.update!(:status => MiqWorker::STATUS_STARTED) } + end + + def sync_stopping_non_rails_workers + stopping = MiqWorker.find_all_stopping + stopping.where(:pid => miq_processes_by_pid.keys) + .reject(&:rails_worker?) + .each { |w| w.update!(:status => MiqWorker::STATUS_STOPPED) } + end end diff --git a/app/models/miq_server/worker_management/systemd.rb b/app/models/miq_server/worker_management/systemd.rb index 43063a06fcb..963b3a647b2 100644 --- a/app/models/miq_server/worker_management/systemd.rb +++ b/app/models/miq_server/worker_management/systemd.rb @@ -6,29 +6,18 @@ def sync_from_system def sync_starting_workers sync_from_system - starting = MiqWorker.find_all_starting - starting.reject(&:rails_worker?).each do |worker| - systemd_worker = miq_services_by_unit[worker[:system_uid]] - next if systemd_worker.nil? + sync_starting_rails_workers + sync_starting_non_rails_workers - if systemd_worker[:load_state] == "loaded" && systemd_worker[:active_state] == "active" && systemd_worker[:sub_state] == "running" - worker.update!(:status => MiqWorker::STATUS_STARTED) - end - end - starting.reload + MiqWorker.find_all_starting.to_a end def sync_stopping_workers sync_from_system - stopping = MiqWorker.find_all_stopping - stopping.reject(&:rails_worker?).each do |worker| - # If the worker record is "stopping" and the systemd unit is gone then the - # worker has successfully exited. - next if miq_services_by_unit[worker[:system_uid]].present? + sync_stopping_rails_workers + sync_stopping_non_rails_workers - worker.update!(:status => MiqWorker::STATUS_STOPPED) - end - stopping.reload + MiqWorker.find_all_stopping.to_a end def cleanup_failed_workers @@ -49,6 +38,29 @@ def cleanup_failed_systemd_services attr_accessor :miq_services, :miq_services_by_unit + def sync_stopping_non_rails_workers + stopping = MiqWorker.find_all_stopping + stopping.reject(&:rails_worker?).each do |worker| + # If the worker record is "stopping" and the systemd unit is gone then the + # worker has successfully exited. + next if miq_services_by_unit[worker[:system_uid]].present? + + worker.update!(:status => MiqWorker::STATUS_STOPPED) + end + end + + def sync_starting_non_rails_workers + starting = MiqWorker.find_all_starting + starting.reject(&:rails_worker?).each do |worker| + systemd_worker = miq_services_by_unit[worker[:system_uid]] + next if systemd_worker.nil? + + if systemd_worker[:load_state] == "loaded" && systemd_worker[:active_state] == "active" && systemd_worker[:sub_state] == "running" + worker.update!(:status => MiqWorker::STATUS_STARTED) + end + end + end + def systemd_manager @systemd_manager ||= begin require "dbus/systemd"