[Twisted-web] How to handle interrupted responses in nevow?

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Wed Oct 13 13:36:50 EDT 2010


On 05:22 pm, peter.westlake at pobox.com wrote:
>I'm about to start looking at this. Is there any formal procedure to
>follow,
>or shall I just put in a ticket and assign it to myself?

That's the formal procedure. :)
>Peter.
>
>On Fri, 08 Oct 2010 17:50 +0100, "Peter Westlake"
><peter.westlake at pobox.com> wrote:
>>
>>
>>On Fri, 08 Oct 2010 13:19 +0000, exarkun at twistedmatrix.com wrote:
>> > On 1 Oct, 02:31 pm, peter.westlake at pobox.com wrote:
>> > >J.P's excellent article 
>>http://jcalderone.livejournal.com/50890.html
>> > >explains how to avoid calling Request.finish() on a request after 
>>its
>> > >connection was lost, because that now raises an exception. The code 
>>in
>> > >the article is able to avoid calling finish() because it handles 
>>the
>> > >rendering itself. The call to finish() is right there in
>> > >_delayedRender.
>> > >But I'm using Nevow (because it's awesome) and all that stuff is 
>>done
>> > >behind the scenes, where I can't get to it.
>> >
>> > Mmm.  Indeed.  Nevow doesn't make it easy to handle this case.
>> >
>> > Nevow itself should be taking some action in this case, I think. 
>>One
>> > possibility would be to cancel the Deferred associated with the 
>>child
>> > lookup/rendering operation.  This would depend on having a new 
>>enough
>> > version of Twisted (such that Deferred cancellation is available)
>> > though.  Otherwise all Nevow could really do is ignore the result of 
>>the
>> > Deferred when it comes.
>>
>>Is the version of Twisted with cancellation more recent than
>>the version of Nevow that detects the error? If not, it might
>>be reasonable to expect cancellation to be available. Or would
>>it be reasonable to test for it at the beginning of the Nevow source?

Unfortunately, the finish() error was introduced in Twisted 9.0 and 
cancellation was introduced in 10.1.  So there's a few combinations to 
account for.
>> > Actually, ignoring the result might be a sensible thing to implement
>> > first anyway.  It should be simpler and have no application 
>>consequences
>> > except to get rid of the now-disallowed finish() call.
>> >
>> > Are you interested in helping implement this?
>>
>>I'm certainly willing to try! Especially as I have a cron job
>>that mails me whenever it finds an exception in the log.
>>
>>Any hints as to how to go about it would be very welcome.
>>So far I've found NevowRequest._cbFinishRender in appserver.py
>>- is that the right sort of area? And NevowSite.handleSegment?

That sounds like the right area.

Jean-Paul



More information about the Twisted-web mailing list