Apache Mod-Python - Created: (MODPYTHON-107) mod_python.publisher shouldn't flush result when written.

This is Interesting: Free IT Magazines  
Home > Archive > Apache Mod-Python > January 2006 > Created: (MODPYTHON-107) mod_python.publisher shouldn't flush result when written.





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Created: (MODPYTHON-107) mod_python.publisher shouldn't flush result when written.
Graham Dumpleton (JIRA)

2006-01-04, 5:50 pm

mod_python.publisher shouldn't flush result when written.
---------------------------------------------------------

Key: MODPYTHON-107
URL: http://issues.apache.org/jira/browse/MODPYTHON-107
Project: mod_python
Type: Improvement
Components: publisher
Versions: 3.2
Reporter: Graham Dumpleton


In mod_python.publisher, the result returned from a published function is returned as the content of the response after it has been converted to a string, using:

req.write(result)

In doing this, the second argument of req.write() is defaulting to '1', which indicates that the output should be flushed immediately.

This fact prevents an output filter like CONTENT_LENGTH being used in conjunction with mod_python.publisher.

This output filter will add a content length header to the response, but only if it is able to read the full content the first time the output filter is called. Because the output is flushed at this point, the output filter isn't able to do that, as it ge
ts called twice. The first time it gets called will be with the actual content, the second time happens when the handler returns apache.OK and is effectively a null output call to force the output filter to be closed off.

If instead the output is written as:

req.write(result,0)

the output will not be flushed immediately and instead will be output in one call when apache.OK is returned. There is no loss of efficiency in doing this and instead it will actually eliminate a redundant call into the output filter.

For further details of this issue see discussion in:

http://www.mail-archive.com/python-...g/msg00951.html

This makes one wander if there should be a configurable option for mod_python.psp to tell it not to flush output as well so that CONTENT_LENGTH could be used in that case as well. ???

Graham Dumpleton

2006-01-07, 2:46 am


On 05/01/2006, at 3:15 PM, Gregory (Grisha) Trubetskoy wrote:

>
> On Wed, 4 Jan 2006, Graham Dumpleton (JIRA) wrote:
>
>
> I kinda mentioned this in the previous e-mail - PSP always does not
> flush output, in fact that 0/1 argument was added to req.write() just
> for PSP. So for pure PSP pages, content-length _should_ work (haven't
> tested it).


Unfortunately, the CONTENT_LENGTH output filter does not in fact work
with PSP.

The reason is that although each individual req.write() doesn't flush,
the PSP code itself does an explicit flush after running the generated
page code.

exec code in global_scope
req.flush()

For it to work, the req.flush() call would have to be removed.

Graham


Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com