zbatery: unlink pid file during graceful shutdown
authorEric Wong <normalperson@yhbt.net>
Wed, 23 Nov 2011 09:52:48 +0000 (23 09:52 +0000)
committerEric Wong <normalperson@yhbt.net>
Wed, 23 Nov 2011 10:36:39 +0000 (23 10:36 +0000)
We don't have the same shutdown sequence as unicorn, there is no
need to leave pid files hanging around during upgrades.  Of
course we can't guarantee this (or any) behavior for
non-graceful shutdowns...

lib/zbatery.rb
t/t0003-reopen-logs.sh

index 08ac5b1..735b1e6 100644 (file)
@@ -75,6 +75,7 @@ module Rainbows
     end
 
     def join
+      at_exit { unlink_pid_safe(pid) if pid }
       trap(:INT) { exit!(0) }
       trap(:TERM) { exit!(0) }
       trap(:QUIT) { Thread.new { stop } }
@@ -102,7 +103,7 @@ module Rainbows
 
     def stop(graceful = true)
       Rainbows.quit!
-      exit!(0) unless graceful
+      graceful ? exit : exit!(0)
     end
 
     def before_fork
index dddc8e3..42c7222 100755 (executable)
@@ -3,7 +3,7 @@
 nr_client=${nr_client-2}
 . ./test-lib.sh
 
-t_plan 19 "reopen rotated logs"
+t_plan 20 "reopen rotated logs"
 
 t_begin "setup and startup" && {
        rtmpfiles curl_out curl_err r_rot
@@ -96,7 +96,20 @@ t_begin "server is now writing logs to new stderr" && {
 }
 
 t_begin "stop server" && {
-       kill $zbatery_pid
+       kill -QUIT $zbatery_pid
+}
+
+t_begin "wait and ensure pid file no longer exists" && {
+       max=0
+       while test $max -lt 60 && kill -0 $zbatery_pid 2>/dev/null
+       do
+               sleep 1
+               max=$(($max + 1))
+       done
+       if test -f "$pid"
+       then
+               die "$pid should be unlinked at shutdown"
+       fi
 }
 
 dbgcat r_err