<div dir="ltr"><div><div><div><div>Hi,<br></div>  LGTM;+1 (only request: turn<br>if (!getConcurrentRequestCount())<br></div>into<br>if (getConcurrentRequestCount() == 0)<br></div>to improve readability.<br><br></div>Good one!<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 17, 2015 at 8:15 AM, Amos Jeffries <span dir="ltr"><<a href="mailto:squid3@treenet.co.nz" target="_blank">squid3@treenet.co.nz</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">When Squid which are processing a lot of traffic, using persistent<br>
client connections, or dealing with long duration requests are shutdown<br>
they can exit with a lot of connections still open. The<br>
shutdown_lifetime directive exists to allow time for existing<br>
transactions to complete, but this is not always possible and has no<br>
effect on idle connections.<br>
<br>
The result is a large dump of aborted FD entries being logged as the TCP<br>
sockets get abruptly reset. Potentially active transactions cache<br>
objects being "corrupted" in the process.<br>
<br>
<br>
This makes ConnStateData and its children implement Runner API callbacks<br>
to receive signals about Squid shutdown. Which allows their close()<br>
handlers to be run properly and make use of AsyncCalls API. Idle client<br>
connections are closed immediately on the startShutdown() signal, so<br>
their closure CPU cycles happens during the shutdown grace period.<br>
<br>
An extra 0-delay event step is added to SignalEngine shutdown sequence<br>
with a new Runner registry hook 'endingShutdown' is added to signal that<br>
the shutdown_lifetime grace period is over for closure of active<br>
transactions. All network FD sockets should be considered unusable fro<br>
read()/write() at that point since close handlers may have already been<br>
scheduled by other Runners. AsyncCall's may still be scheduled to<br>
release resources.<br>
<br>
Also adds a DeregisterRunner() API action to remove Runners dynamically<br>
from the registered set.<br>
<br>
The Squid shutdown sequence is now:<br>
<br>
* shutdown signal received:<br>
 - listening sockets closed<br>
 - idle client connections closed<br>
<br>
* shutdown grace period ends:<br>
 - remaining client connections closed<br>
<br>
* shutdown finishes:<br>
 - main signal and Async loop halted<br>
 - all memory free'd<br>
<br>
<br>
Server connections which are PINNED or in active use during the<br>
endingShutdown execution will be closed cleanly as a side-effect of the<br>
client closures. Otherwise there is no change to server connections or<br>
other FD sockets behaviour on shutdown.<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
Amos<br>
</font></span><br>_______________________________________________<br>
squid-dev mailing list<br>
<a href="mailto:squid-dev@lists.squid-cache.org">squid-dev@lists.squid-cache.org</a><br>
<a href="http://lists.squid-cache.org/listinfo/squid-dev" rel="noreferrer" target="_blank">http://lists.squid-cache.org/listinfo/squid-dev</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">    Francesco</div>
</div>