At present shutdown happens over two stages. With server socket and auth
shutdown immediately and everything else 30 seconds or so later.
We have a number of bugs open about this, ranging from complaints that
idle squid still take a full 30sec shutdown when they should fast-track
the process and close quickly. Through to crashes when helper shutdown
or swap.state dump are started too late and not given enough time to
complete.
I would like to split that process down into several steps with as much
stuff being shut down as fast as reasonable.
stage 1:
* TIMEOUT: shutdown_lifetime/2 converted to a timeout, to trigger
stage-2 early if needed.
* close ICP, HTCP, HTTP, HTTPS ports, but leave DNS open
* prevent keep-alive, and close all connections on completion
* disable the background cyclic events (ie garbage collection). we can
trigger these "manually" as part of the shutdown if they are needed at
certain points.
* begin swap.state dump of index
* call stage 2 immediately IF no active client connections AND stage<2.
stage 2:
* TIMEOUT: shutdown_lifetime/2 converted to a timeout, to trigger
stage-3 early if needed.
* disable new reads.
* disconnect delay pools. push any buffered information out to clients
at full speed and terminate. (bad idea? good idea?)
* call stage 3 immediately IF no active client connections AND stage<3.
stage 3:
* terminate remaining incomplete active clients using their close
handlers.
* loop until async call queue is empty.
* skip to stage N immediately.
stage N:
* terminate the event loop and exit.
Attached is a proposed patch which alters shutting_down into an
incremental stage counter and alters the documentation. But does not
alter the fundamentals of the current state.
I believe we can easily add several shutdown functions to the
SignalEngine. Or move these to the cache manager as series of async
calls with the SignalEngine simply triggering the cache manager shutdown
event.
Amos
-- Please be using Current Stable Squid 2.7.STABLE9 or 3.1.14 Beta testers wanted for 3.2.0.10
This archive was generated by hypermail 2.2.0 : Mon Aug 08 2011 - 12:00:01 MDT