about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-08-07 04:25:51 +0000
committerEric Wong <normalperson@yhbt.net>2010-08-07 04:32:22 +0000
commite4d0b226391948ef433f1d0135814315e4c48535 (patch)
treef56b9fd5f2e196b68cfedf7fc0a39241b8e7d36a
parentf1d33c80dd6c5650f960f7087f4e08f809754d34 (diff)
downloadunicorn-e4d0b226391948ef433f1d0135814315e4c48535.tar.gz
Something is wrong if workers exit with a non-zero status,
so we'll increase the log level to help prevent people
from missing it.
-rw-r--r--lib/unicorn.rb4
-rwxr-xr-xt/t0010-reap-logging.sh55
2 files changed, 57 insertions, 2 deletions
diff --git a/lib/unicorn.rb b/lib/unicorn.rb
index 8f490bb..52349f0 100644
--- a/lib/unicorn.rb
+++ b/lib/unicorn.rb
@@ -519,8 +519,8 @@ module Unicorn
             proc_name 'master'
           else
             worker = WORKERS.delete(wpid) and worker.tmp.close rescue nil
-            logger.info "reaped #{status.inspect} " \
-                        "worker=#{worker.nr rescue 'unknown'}"
+            m = "reaped #{status.inspect} worker=#{worker.nr rescue 'unknown'}"
+            status.success? ? logger.info(m) : logger.error(m)
           end
         end
       rescue Errno::ECHILD
diff --git a/t/t0010-reap-logging.sh b/t/t0010-reap-logging.sh
new file mode 100755
index 0000000..93d8c60
--- /dev/null
+++ b/t/t0010-reap-logging.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+. ./test-lib.sh
+t_plan 9 "reap worker logging messages"
+
+t_begin "setup and start" && {
+        unicorn_setup
+        cat >> $unicorn_config <<EOF
+after_fork { |s,w| File.open('$fifo','w') { |f| f.write '.' } }
+EOF
+        unicorn -c $unicorn_config pid.ru &
+        test '.' = $(cat $fifo)
+        unicorn_wait_start
+}
+
+t_begin "kill 1st worker=0" && {
+        pid_1=$(curl http://$listen/)
+        kill -9 $pid_1
+}
+
+t_begin "wait for 2nd worker to start" && {
+        test '.' = $(cat $fifo)
+}
+
+t_begin "ensure log of 1st reap is an ERROR" && {
+        dbgcat r_err
+        grep 'ERROR.*reaped.*worker=0' $r_err | grep $pid_1
+        dbgcat r_err
+        > $r_err
+}
+
+t_begin "kill 2nd worker gracefully" && {
+        pid_2=$(curl http://$listen/)
+        kill -QUIT $pid_2
+}
+
+t_begin "wait for 3rd worker=0 to start " && {
+        test '.' = $(cat $fifo)
+}
+
+t_begin "ensure log of 2nd reap is a INFO" && {
+        grep 'INFO.*reaped.*worker=0' $r_err | grep $pid_2
+        > $r_err
+}
+
+t_begin "killing succeeds" && {
+        kill $unicorn_pid
+        wait
+        kill -0 $unicorn_pid && false
+}
+
+t_begin "check stderr" && {
+        check_stderr
+}
+
+t_done