From c9453d4c6f6f32d472a72a8bb7e103b6852985eb Mon Sep 17 00:00:00 2001 From: Joe Rafaniello Date: Tue, 21 Apr 2020 13:42:19 -0400 Subject: [PATCH] Merge pull request #20077 from yrudman/check-for-nilif-stdin-not-nil-in-cockpit-worker Fixed cockpit process starting (cherry picked from commit 87de914b8bd946dc2d91b6446d66db5187daef92) https://bugzilla.redhat.com/show_bug.cgi?id=1824355 --- app/models/miq_cockpit_ws_worker/runner.rb | 21 ++++++++++++++------- lib/miq_cockpit.rb | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/models/miq_cockpit_ws_worker/runner.rb b/app/models/miq_cockpit_ws_worker/runner.rb index 29cc3f0935a..927b3027ecc 100644 --- a/app/models/miq_cockpit_ws_worker/runner.rb +++ b/app/models/miq_cockpit_ws_worker/runner.rb @@ -66,6 +66,8 @@ def stop_cockpit_ws def stop_cockpit_ws_process return unless @pid + @stdout&.close + @stderr&.close Process.kill("TERM", @pid) wait_on_cockpit_ws end @@ -73,7 +75,7 @@ def stop_cockpit_ws_process # Waits for a cockpit-ws process to stop. The process is expected to be # in the act of shutting down, and thus it will wait 5 minutes # before issuing a kill. - def wait_on_cockpit_ws(pid) + def wait_on_cockpit_ws(pid = nil) pid ||= @pid # TODO: Use Process.waitpid or one of its async variants begin @@ -148,13 +150,18 @@ def cockpit_ws_run "XDG_CONFIG_DIRS" => cockpit_ws.config_dir, "DRB_URI" => @drb_uri } - Bundler.with_clean_env do - stdin, stdout, stderr, wait_thr = Open3.popen3(env, *cockpit_ws.command(BINDING_ADDRESS), :unsetenv_others => true) + _log.info("Starting cockpit-ws process with command: #{cockpit_ws.command(BINDING_ADDRESS)} ") + _log.info("Cockpit environment #{env} ") + stdin, stdout, stderr, wait_thr = Bundler.with_clean_env do + Open3.popen3(env, cockpit_ws.command(BINDING_ADDRESS), :unsetenv_others => true) + end + stdin&.close + if wait_thr + _log.info("#{log_prefix} cockpit-ws process started - pid=#{wait_thr.pid}") + return wait_thr.pid, stdout, stderr + else + raise "Cockpit-ws process failed to start" end - stdin.close - - _log.info("#{log_prefix} cockpit-ws process started - pid=#{@pid}") - return wait_thr.pid, stdout, stderr end def check_drb_service diff --git a/lib/miq_cockpit.rb b/lib/miq_cockpit.rb index 210403d811f..3f720278ab7 100644 --- a/lib/miq_cockpit.rb +++ b/lib/miq_cockpit.rb @@ -71,7 +71,7 @@ def self.url(miq_server, opts, address) def initialize(opts = {}) @opts = opts || {} - @config_dir = File.join(__dir__, "..", "config") + @config_dir = Rails.root.join("config").to_s @cockpit_conf_dir = File.join(@config_dir, "cockpit") FileUtils.mkdir_p(@cockpit_conf_dir) end