[Zope-dev] zope.server still used?

Marius Gedminas marius at gedmin.as
Sun Dec 18 11:05:00 UTC 2011


On Sat, Dec 17, 2011 at 09:57:18PM -0500, Chris McDonough wrote:
> Is zope.server still largely used by e.g. bluebream, grok, and other
> zope 3 apps?  Or do people tend to use other WSGI servers instead?
> Either way, arguments for or against zope.server would be useful; I'm
> trying to decide whether to base some new stuff on it.

We still use zope.server in production, mostly out of inertia (the app
had been using Zope 3.2, then the 3.4 KGS for a looong time, before
finally making the climb to ZTK 1.0).  These are not high-volume sites.

It surprises me occasionally with weird assertion errors of this kind:

    2011-11-01T18:00:11 ERROR zope.server.taskthreads Exception during task
    Traceback (most recent call last):
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/taskthreads.py", line 49, in handlerThread
        task.service()
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/serverchannelbase.py", line 205, in service
        task.service()
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/http/httptask.py", line 69, in service
        self.channel.server.executeRequest(self)
      File "/apps/zopes/app-name/eggs/zc.zservertracelog-1.3.0-py2.6.egg/zc/zservertracelog/tracelog.py", line 145, in executeRequest
        task.write(response)
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/http/httptask.py", line 241, in write
        self.bytes_written += channel.write(data)
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/dualmodechannel.py", line 168, in write
        if not self._flush_some():
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/dualmodechannel.py", line 185, in _flush_some
        num_sent = self.send(chunk)
      File "/usr/lib/python2.6/asyncore.py", line 358, in send
        self.handle_close()
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/dualmodechannel.py", line 59, in handle_close
        self.close()
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/dualmodechannel.py", line 206, in close
        assert self.async_mode
    AssertionError

I haven't noticed any harm from this (the server keeps on serving other
requests, clients do not see any error pages), but I'd like to know what it
*means*.  I thought I asked this list once, but received no reply -- but now I
can't even find my question, so maybe I only planned to ask and never got
around to it...

This error happened once in 2010 and 24 more times in 2011.

The other fun error I get (rather more often) is

    2011-11-28T14:21:58 ERROR zope.server.taskthreads Exception during task
    Traceback (most recent call last):
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/taskthreads.py", line 49, in handlerThread
        task.service()
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/serverchannelbase.py", line 205, in service
        task.service()
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/http/httptask.py", line 77, in service
        self.channel.close_when_done()
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/dualmodechannel.py", line 193, in close_when_done
        while self._flush_some():
      File "/apps/zopes/app-name/eggs/zope.server-3.6.2-py2.6.egg/zope/server/dualmodechannel.py", line 185, in _flush_some
        num_sent = self.send(chunk)
      File "/usr/lib/python2.6/asyncore.py", line 352, in send
        result = self.socket.send(data)
    error: [Errno 32] Broken pipe

I suspect I know what this is (we do a redirect in self.update() but
self.__call__() has no check for that and renders the template anyway, but the
browser sees the redirect and closes the connection without reading the entire
response body).  I haven't actually proven that to my satisfaction, but,
once again, there do not seem to be any harmful consequences (other than
mildly annoying me with these rather rare error emails).

I wish zope.server at least would let me know which request (method and
URL) was responsible for the particular task (a __traceback_info__ annotation
would make it into our error emails).  Some day I might make that happen.

Marius Gedminas
-- 
http://pov.lt/ -- Zope 3/BlueBream consulting and development
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://mail.zope.org/pipermail/zope-dev/attachments/20111218/f5886cc0/attachment.sig>


More information about the Zope-Dev mailing list