On Fri, 2004-01-23 at 08:07, Joe Orton wrote:

> Nice, this is easy enough to reproduce.  It only fills up because the
> httpd children all have the read end of the pipe open, which is a bug in
> itself.  Applying below ensures that the pipe gets closed when the piped
> logger exits, and so writes() fail with ETERM rather than blocking up in
> the leftover children.

Yup, it fixes the immediate hanging-httpd problem, but then the httpd
child is left unable to log *anything* after the 'graceful' for the
remainder of the svn commit.  If the 'graceful' happens early on, you
could potentially lose all logging for most of the commit.  It's not a
real fix.

> To fix this properly, I suppose piped loggers should not get SIGTERMed
> during a graceful restart, they should read till EOF then exit(0): then
> when the last child attached to the piped logger for a particular
> generation quits, the pipe is closed and the piped logger terminates
> gracefully too, without losing log messages.

Yah, that sounds nice.

If the apache developers are OK, I'd like to file an issue about this in
the public httpd issuetracker.  What we've really got here is a bug in
the piped logger code;  it just can't deal with long-lived httpd
children.  

Anyone mind if I file an issue?  Anyone using Subversion (mod_dav_svn)
with 'rotatelogs' is likely to be burned by this problem.  I'd like to
be able to point them to the issue, at least.





Reply via email to