[Zope-dev] more Zope2.6 fun: ZEO client death.

Anthony Baxter anthony@interlink.com.au
Wed, 30 Jul 2003 17:21:51 +1000


So I see ZEO clients here falling over all over the place under current
2.6 with:

2003-07-30T07:01:04 ERROR(200) ZEO uncaptured python exception, 
closing channel <ZEO.zrpc.asyncRPC connected '' at 0xc57198> 

(exceptions.AttributeError:keys 
[/export/01/zope/dev_ekit/ZServer/medusa/asyncore.py|poll|94] 
[/export/01/zope/dev_ekit/ZServer/medusa/asyncore.py|handle_read_event|395] 
[/export/01/zope/dev_ekit/lib/python/ZEO/smac.py|handle_read|172] 
[/export/01/zope/dev_ekit/lib/python/ZEO/zrpc.py|message_input|282] 
[/export/01/zope/dev_ekit/lib/python/ZEO/ClientStorage.py|out_of_band_hook|191] 
[/export/01/zope/dev_ekit/lib/python/ZEO/Invalidator.py|end|126] 
[/export/01/zope/dev_ekit/lib/python/ZODB/DB.py|invalidate|318])

The relevant code in current 2.6 CVS:

        if connection is not None:
            version=connection._version
        # Update modified in version cache
        # XXX must make this work with list or dict to backport to 2.6
>>>     for oid in oids.keys():
            h=hash(oid)%131
            o=self._miv_cache.get(h, None)
            if o is not None and o[0]==oid: del self._miv_cache[h]

(or http://cvs.zope.org/Zope/lib/python/ZODB/DB.py?annotate=1.43.6.4#316 )

The comment is correct. It _does_ need to work with a list or dict.
It doesn't right now. If I'm _really_ _really_ lucky, I can have a
ZEO client stay up for nearly half an hour before it hits this problem
and falls over. The code was committed 2 months ago, as rev 1.43.6.3
"Backport atomic invalidations code."

This, to me, seems a showstopper for 2.6.2. 

Anthony