Lingering HTTP Channel in web2 when testing with trial
Hi I have an application which uses web2. In good twisted style I'm writing tests for it, and using trial. When performing some rather simple page retrievals a get a lingering http channel. Setting twisted.internet.base.DelayedCall.debug = True I get this trace: File "/usr/lib/python2.4/site-packages/twisted/trial/util.py", line 131, in _dispatch getattr(self, "do_%s" % attr)() File "/usr/lib/python2.4/site-packages/twisted/trial/util.py", line 173, in do_cleanPending raise PendingTimedCallsError(s) twisted.trial.util.PendingTimedCallsError: pendingTimedCalls still pending (consider setting twisted.internet.base.DelayedCall.debug = True): <DelayedCall 1083946540 [19.9427890778s] called=0 cancelled=0 HTTPChannel._lingerClose() traceback at creation: File "/usr/bin/trial", line 24, in ? run() File "/usr/lib/python2.4/site-packages/twisted/scripts/trial.py", line 676, in run suite = reallyRun(config) File "/usr/lib/python2.4/site-packages/twisted/scripts/trial.py", line 657, in reallyRun suite.run(config['random']) File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 250, in run tr.runTests(randomize=(seed is not None)) File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 496, in runTests runner.runTests(randomize) File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 601, in runTests self._apply(_runTestMethod) File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 543, in _apply f(tm) File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 597, in _runTestMethod testMethod.run(tci) File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 849, in run orig(tci) File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 332, in __call__ lambda :util.wait(defer.maybeDeferred(self.original, *a, **kw), File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 409, in _runWithWarningFilters return f(*a, **kw) File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 333, in <lambda> timeout, useWaitError=True)) File "/usr/lib/python2.4/site-packages/twisted/trial/util.py", line 325, in wait r = _Wait.wait(d, timeout) File "/usr/lib/python2.4/site-packages/twisted/trial/util.py", line 269, in wait reactor.iterate(0.01) File "/usr/lib/python2.4/site-packages/twisted/internet/base.py", line 360, in iterate self.doIteration(delay) File "/usr/lib/python2.4/site-packages/twisted/internet/selectreactor.py", line 133, in doSelect _logrun(selectable, _drdw, selectable, method, dict) File "/usr/lib/python2.4/site-packages/twisted/python/log.py", line 56, in callWithLogger return callWithContext({"system": lp}, func, *args, **kw) File "/usr/lib/python2.4/site-packages/twisted/python/log.py", line 41, in callWithContext return context.call({ILogContext: newCtx}, func, *args, **kw) File "/usr/lib/python2.4/site-packages/twisted/python/context.py", line 52, in callWithContext return self.currentContext().callWithContext(ctx, func, *args, **kw) File "/usr/lib/python2.4/site-packages/twisted/python/context.py", line 31, in callWithContext return func(*args,**kw) File "/usr/lib/python2.4/site-packages/twisted/internet/selectreactor.py", line 139, in _doReadOrWrite why = getattr(selectable, method)() File "/usr/lib/python2.4/site-packages/twisted/internet/abstract.py", line 134, in doWrite result = self._closeWriteConnection() File "/usr/lib/python2.4/site-packages/twisted/internet/tcp.py", line 376, in _closeWriteConnection p.writeConnectionLost() File "/usr/lib/python2.4/site-packages/twisted/web2/channel/http.py", line 788, in writeConnectionLost self._lingerTimer = reactor.callLater(20, self._lingerClose)
This if course makes sense, especially if the server lost its connection. I am doing cleanup in tearDown (calling stopListening() on the port), but trial still complains. Canceling the call, and calling it manually in tearDown, doesn't appear to help either. How do I make it shut it up in a proper way? PS. I'm rather pleased with the web2 framework, especially the stream framework (once I got my head wrapped around it), but it is hard to get an overview of the internals. A brief description of the design, philosophy, what was wrong with web(1), etc. would be very nice (I do realize that web2 is a moving target). -- - Henrik
participants (1)
-
Henrik Thostrup Jensen