From 3beeabe0293124d9cdd79bb6bf22e3878bffa3cd Mon Sep 17 00:00:00 2001 From: MSP-Greg Date: Fri, 6 Sep 2019 16:31:31 -0500 Subject: [PATCH] Fix Worker external TERM signalling External Worker TERM signals 'enter' on the forked side of the worker, but need to be communicated to other side --- lib/puma/cluster.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/puma/cluster.rb b/lib/puma/cluster.rb index d3da53d6a8..6a44eaa3c6 100644 --- a/lib/puma/cluster.rb +++ b/lib/puma/cluster.rb @@ -216,8 +216,10 @@ def check_workers(force=false) log "- Stopping #{w.pid} for phased upgrade..." end - w.term - log "- #{w.signal} sent to #{w.pid}..." + unless w.term? + w.term + log "- #{w.signal} sent to #{w.pid}..." + end end end end @@ -266,6 +268,7 @@ def worker(index, master) server = start_server Signal.trap "SIGTERM" do + @worker_write << "e#{Process.pid}\n" rescue nil server.stop end @@ -497,8 +500,11 @@ def run w.boot! log "- Worker #{w.index} (pid: #{pid}) booted, phase: #{w.phase}" force_check = true + when "e" + # external term, see worker method, Signal.trap "SIGTERM" + w.instance_variable_set :@term, true when "t" - w.term + w.term unless w.term? force_check = true when "p" w.ping!(result.sub(/^\d+/,'').chomp)