[Zope-Checkins] CVS: Zope2 - Connection.py:1.43.2.2.6.3
Jim Fulton
jim@digiciool.com
Wed, 14 Mar 2001 11:40:02 -0500 (EST)
Update of /cvs-repository/Zope2/lib/python/ZODB
In directory korak:/tmp/cvs-serv7807
Modified Files:
Tag: Catalog-BTrees-Integration
Connection.py
Log Message:
Conflict errors raised during setstate did not cause the currently
invalidated objects to deactivated if not changes had been made yet.
Now, the connection registers itself with the transaction manager so
it can participate in transaction abort and deactivate any invalidated
objects.
Conflict errors raised by setstate now include object class name.
--- Updated File Connection.py in package Zope2 --
--- Connection.py 2001/03/02 18:22:20 1.43.2.2.6.2
+++ Connection.py 2001/03/14 16:40:02 1.43.2.2.6.3
@@ -231,7 +231,10 @@
This just deactivates the thing.
"""
- self._cache.invalidate(object._p_oid)
+ if object is self:
+ self._cache.invalidate(self._invalidated)
+ else:
+ self._cache.invalidate(object._p_oid)
def cacheFullSweep(self, dt=0): self._cache.full_sweep(dt)
def cacheMinimize(self, dt=0): self._cache.minimize(dt)
@@ -258,6 +261,8 @@
db._closeConnection(self)
def commit(self, object, transaction, _type=type, _st=type('')):
+ if object is self:
+ return # we registered ourself
oid=object._p_oid
invalid=self._invalid
if oid is None or object._p_jar is not self:
@@ -509,7 +514,8 @@
invalid=self._invalid
if invalid(oid) or invalid(None):
if not hasattr(object.__class__, '_p_independent'):
- raise ConflictError, `oid`
+ get_transaction().register(self)
+ raise ConflictError(`oid`, `object.__class__`)
invalid=1
else:
invalid=0
@@ -533,7 +539,8 @@
try: del self._invalidated[oid]
except KeyError: pass
else:
- raise ConflictError, `oid`
+ get_transaction().register(self)
+ raise ConflictError(`oid`, `object.__class__`)
except:
t, v =sys.exc_info()[:2]