Req #43224 [Asn->Fbk]: support real graceful reload of fastcgi

From: Date: Fri, 08 Apr 2011 13:48:09 +0000
Subject: Req #43224 [Asn->Fbk]: support real graceful reload of fastcgi
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-160032@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=43224&edit=1

 ID:                 43224
 Updated by:         dmitry@php.net
 Reported by:        glen at delfi dot ee
 Summary:            support real graceful reload of fastcgi
-Status:             Assigned
+Status:             Feedback
 Type:               Feature/Change Request
 Package:            CGI related
 Operating System:   PLD Linux
 PHP Version:        5.2.5RC2
 Assigned To:        dmitry
 Block user comment: N
 Private report:     N

 New Comment:

the listening socket is already set into SO_REUSEADDR mode, so it's not
a problem to start new PHP FastCGI process(es) while another is not
finished yet.


Previous Comments:
------------------------------------------------------------------------
[2008-11-16 16:09:20] glen at delfi dot ee

ping?

for now the patch only makes php-fcgi to close listening socket on 
SIGTERM, so if it continues to run, new processes are able to spawn 
to the same tcp port.

http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/php-fcgi-graceful.patch?rev=1.8

------------------------------------------------------------------------
[2008-07-29 09:22:33] glen at delfi dot ee

Didn't know about SIGQUIT, but ok, you can keep the signal handlers, 
but closing listening sockets on SIGTERM does not break process 
managers, it will do only good.

as for original behaviour, if you have some long running request 
running and you terminate fcgi processes with SIGTERM you can not 
start new fcgi processes on same tcp port (as the socket is still in 
use)

so to summarize signal handlers would be:
SIGTERM, SIGUSR1 - graceful shutdown -- listening sockets are 
closed, processing continues until scripts finish

SIGINT, SIGQUIT (, SIGKILL) - immediate shutdown -- listening 
sockets are closed, processes are terminated unconditionally whether 
they are idle or not.

------------------------------------------------------------------------
[2008-07-29 09:00:33] dmitry@php.net

FastCGI PHP SAPI supports only gracefull restart initiated by SIGTERM
and SIGUSR1, however you still able to terminate worker processes with
sending SIGINT/SIGQUIT to process group.

I'm not going to change it as it may break behavior with some FastCGI
managers.

------------------------------------------------------------------------
[2008-06-11 11:18:40] glen at delfi dot ee

hi

any progress with the patch?

i can confirm that it works without problems since i initially 
created the patch.

------------------------------------------------------------------------
[2007-11-09 11:42:42] glen at delfi dot ee

Description:
------------
currently (checked 5.3 and 5.2) php-fcgi when receiving terminating 
signal, finishes the request, ie does not terminate immedately.

however it does not close the socket it is listening for incoming 
connections.

and there's no way to make the process really terminate in a nice 
way. ie if you really want to terminate fcgi backend processes while 
not caring whether the request is finished or not you can do this 
only by sending SIGKILL, but it might be too brutal :)

for the first problem i've created patch for unix (linux) platform, 
few testing shows that it really works.

for the second problem i'd suggest to use SIGINT for graceful 
restart (close listening socket, end when php processing finishes)

and SIGTERM would just close listening socket and abort php 
processing by making the child exit itself.

patch for 5.2.4 (also 5.2.5RC2):
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/php-fcgi-graceful.patch?only_with_tag=MAIN

patch for 5.3-snap:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/php-fcgi-graceful.patch?only_with_tag=DEVEL




------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=43224&edit=1


Thread (8 messages)

« previous php.bugs (#160032) next »