Graham Leggett wrote:

The trouble is that to use this, every app that wants to use pipes
needs to use a special call to do so, which isn't ideal.

  Agreed.  I had hoped to treat the pipe like a file, too, but
ran into the issue that this server likes to open/close its logs
repeatedly, so you get EOFs over the pipe, which tends to close most
readers that treat it like a file (e.g., cat).  After much suffering
I concluded I just wanted rotatelogs to read the darn thing directly.
See http://marc.info/?l=apache-httpd-dev&m=135586929409332&w=2 for details.

  I can certainly see problems with this APR patch -- for example,
I should have supported more than O_NONBLOCK, akin to the way
pipenonblock() in file_io/unix/pipe.c supports things like O_NDELAY too.

  FWIW, the trunk version of apr_file_open() also seems to be missing
these other non-blocking OS filehandle flags in its APR_FOPEN_NONBLOCK
support, if I'm not mistaken.


  The basic problem would be solved if there was a way to get
all the actions of pipenonblock() applied right inside apr_file_open(),
before the filehandle is actually opened.  That way the apr_file_t
flags (is_pipe, blocking, timeout, etc.) would be set properly along
with the appropriate OS filehandle flags.

  Any kind of way to do this would be enough, I think, to support
using rotatelogs against a non-stdin file or pipe ... and that was
really my underlying goal here.


In our case we wanted the named pipes to be interchangeable with files,
and created an application that summarised log file data on the fly
before writing it to the named pipe (for example, 100 hits to "/foo"
became "100: /foo").

  Some aspects of our setup are relatively unusual, I suspect, but
our server is a well-known one which is documented to support writing
its logs out to FIFOs (with the caveat that it likes to close them!)
Attaching rotatelogs to those is really all I wanted to do, but it
was a bumpier road than I expected.

Chris.

--
GPG Key ID: 088335A9
GPG Key Fingerprint: 86CD 3297 7493 75BC F820  6715 F54F E648 0883 35A9

Reply via email to