diff options
author | danielsdeleo <dan@opscode.com> | 2013-11-04 11:29:30 -0800 |
---|---|---|
committer | danielsdeleo <dan@opscode.com> | 2013-11-04 11:29:30 -0800 |
commit | ed33d34fec6ed1bf2400500f4330a7fb4fb871cb (patch) | |
tree | f8f3f90b96ad7eb65fae5e164ae70bb58cf05e68 | |
parent | 4ff2d130c3d6e68a30340175b5ce0b164ce26220 (diff) | |
download | mixlib-shellout-ed33d34fec6ed1bf2400500f4330a7fb4fb871cb.tar.gz |
Add termination info to error messages
If no logger is configured, we still want to inform the user that the
process was killed (and how).
-rw-r--r-- | lib/mixlib/shellout.rb | 2 | ||||
-rw-r--r-- | lib/mixlib/shellout/unix.rb | 4 | ||||
-rw-r--r-- | spec/mixlib/shellout_spec.rb | 2 |
3 files changed, 6 insertions, 2 deletions
diff --git a/lib/mixlib/shellout.rb b/lib/mixlib/shellout.rb index a267162..66faa40 100644 --- a/lib/mixlib/shellout.rb +++ b/lib/mixlib/shellout.rb @@ -154,6 +154,7 @@ module Mixlib @environment = DEFAULT_ENVIRONMENT @cwd = nil @valid_exit_codes = [0] + @terminate_reason = nil if command_args.last.is_a?(Hash) parse_options(command_args.pop) @@ -191,6 +192,7 @@ module Mixlib # results when the command exited with an unexpected status. def format_for_exception msg = "" + msg << "#{@terminate_reason}\n" if @terminate_reason msg << "---- Begin output of #{command} ----\n" msg << "STDOUT: #{stdout.strip}\n" msg << "STDERR: #{stderr.strip}\n" diff --git a/lib/mixlib/shellout/unix.rb b/lib/mixlib/shellout/unix.rb index 2ffa5cd..15ead60 100644 --- a/lib/mixlib/shellout/unix.rb +++ b/lib/mixlib/shellout/unix.rb @@ -67,7 +67,7 @@ module Mixlib # read anything it wrote when we killed it attempt_buffer_read # raise - raise CommandTimeout, "command timed out:\n#{format_for_exception}" + raise CommandTimeout, "Command timed out after #{@execution_time.to_i}s:\n#{format_for_exception}" end end @@ -302,10 +302,12 @@ module Mixlib def reap_errant_child return if attempt_reap + @terminate_reason = "Command execeded allowed execution time, killed by TERM signal." logger.error("Command execeded allowed execution time, sending TERM") if logger Process.kill(:TERM, @child_pid) sleep 3 return if attempt_reap + @terminate_reason = "Command execeded allowed execution time, did not respond to TERM. Killed by KILL signal." logger.error("Command did not exit from TERM, sending KILL") if logger Process.kill(:KILL, @child_pid) reap diff --git a/spec/mixlib/shellout_spec.rb b/spec/mixlib/shellout_spec.rb index fa0ee51..71ecfef 100644 --- a/spec/mixlib/shellout_spec.rb +++ b/spec/mixlib/shellout_spec.rb @@ -869,7 +869,7 @@ describe Mixlib::ShellOut do let(:logger) { Logger.new(log_output) } let(:options) { {:timeout => 1, :logger => logger} } - it "should log messages about killing the child process", :focus do + it "should log messages about killing the child process" do # note: let blocks don't correctly memoize if an exception is raised, # so can't use executed_cmd lambda { shell_cmd.run_command}.should raise_error(Mixlib::ShellOut::CommandTimeout) |