[Zope-CMF] ConnectionStateErrors and PersistentComponent in CMF
2.1 b1 on Zope 2.10.3
Arnar Lundesgaard
arnar.lundesgaard at bouvet.no
Sun May 6 09:34:00 EDT 2007
The 3. May. 2007 kl. 13.42, Arnar Lundesgaard wrote:
> Hi, I'm developing a site on CMF 2.1b1 on Zope 2.10.3 and somehow
> I'm triggering ConnectionStateErrors.
>
> I'm not yet as familiar with the Zope 3 machinery as I would like,
> but it seems that when certain requests are being closed the event
> subsystem tries to load the sitemanager that contains references to
> persistent objects (the portal_* tools mostly) and do some cleanup.
>
> This raises a ConnectionStateError as the Connection has alread
> been closed. It doesn't happen all the time, and it appears more
> often when the user is Anonymous.
>
> It seems to be trying to load data on the _components attribute on
> the portal object as a Site after the connection has been closed.
>
> Anyone know what could be causing this?
Some more digging revealed that switching two lines in
ZPublisher.BaseRequest.BaseRequest.close ensures that the connection
is closed _after_ the eventsystem finishes cleaning up.
# Current version
def close(self):
self.other.clear()
self._held = None
notify(EndRequestEvent(None, self))
# Patched version
def close(self):
self.other.clear()
notify(EndRequestEvent(None, self))
self._held = None
self._hold seems to "hold" a ZApplicationWrapper from App/
ZApplication.py and calls App.ZApplication.Cleanup.__del__ when the
last reference is removed. Cleanup.__del__ contains:
self._jar.close()
I have no idea what sort of ill effects this change might have, but
it solved the problem I was seeing with persistent components and I
haven't ѕeen any new problems yet. I'll be monkeypatching this until
somebody tells me it is a bad idea. :-)
The notify call was added 1.5 year ago:
<http://svn.zope.org/Zope/trunk/lib/python/ZPublisher/
BaseRequest.py?rev=30278&r1=39848&r2=30278>
Arnar Lundesgaard | Consultant
Bouvet ASA, Sandakerveien 24C D11, pb 4430 Nydalen, N-0403 Oslo
Phone.+47 23 40 60 00/61 22 | Fax: 47 23 40 60 01 | Mob:+47 98 23
80 36
http://www.bouvet.no | arnar.lundesgaard at bouvet.no
More information about the Zope-CMF
mailing list