[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]