[Zope3-checkins] CVS: Zope3/src/ZODB - Connection.py:1.140.2.4

Tim Peters tim.one at comcast.net
Tue Mar 30 11:48:10 EST 2004


Update of /cvs-repository/Zope3/src/ZODB
In directory cvs.zope.org:/tmp/cvs-serv1022/src/ZODB

Modified Files:
      Tag: jeremy-txn-branch
	Connection.py 
Log Message:
Connection.commit():  if oid is in self._conflicts, stop registering the
object before raising ReadConflictError.  The object must already be
registered (it's a conflict), and tying to register it again causes an
assert to fail often in the MappingStorage flavor (which doesn't support
MVCC) of check7ZODBThreads.


=== Zope3/src/ZODB/Connection.py 1.140.2.3 => 1.140.2.4 ===
--- Zope3/src/ZODB/Connection.py:1.140.2.3	Mon Mar 29 14:15:19 2004
+++ Zope3/src/ZODB/Connection.py	Tue Mar 30 11:47:52 2004
@@ -81,7 +81,7 @@
 
     In many applications, root() is the only method of the Connection
     that you will need to use.
-    
+
     Synchronization
     ---------------
 
@@ -106,7 +106,7 @@
     XXX Mention the database pool.
 
     :Groups:
-    
+
       - `User Methods`: root, get, add, close, db, sync, isReadOnly,
         cacheGC, cacheFullSweep, cacheMinimize, getVersion,
         modifiedInVersion
@@ -251,7 +251,7 @@
         if self._storage is None:
             # XXX Should this be a ZODB-specific exception?
             raise RuntimeError("The database connection is closed")
-        
+
         obj = self._cache.get(oid, None)
         if obj is not None:
             return obj
@@ -300,7 +300,7 @@
         if self._storage is None:
             # XXX Should this be a ZODB-specific exception?
             raise RuntimeError("The database connection is closed")
-        
+
         marker = object()
         oid = getattr(obj, "_p_oid", marker)
         if oid is marker:
@@ -334,7 +334,7 @@
         was closed will be processed.
 
         If resetCaches() was called, the cache will be cleared.
-        
+
         :Parameters:
           - `odb`: that database that owns the Connection
         """
@@ -343,7 +343,7 @@
         # other attributes on open and clearing them on close?
         # A Connection is only ever associated with a single DB
         # and Storage.
-        
+
         self._db = odb
         self._storage = odb._storage
         self._sortKey = odb._storage.sortKey
@@ -415,7 +415,7 @@
 
     def cacheGC(self):
         """Reduce cache size to target size.
-        
+
         Call _p_deactivate() on cached objects until the cache size
         falls under the target size.
         """
@@ -478,7 +478,6 @@
 
         oid = obj._p_oid
         if oid in self._conflicts:
-            self.getTransaction().register(obj)
             raise ReadConflictError(object=obj)
 
         if oid is None or obj._p_jar is not self:
@@ -543,7 +542,7 @@
         src = self._storage
         self._storage = self._tmp
         self._tmp = None
-        
+
         self._log.debug("Commiting subtransaction of size %s", src.getSize())
         oids = src._index.keys()
         self._storage.tpc_begin(t)
@@ -609,7 +608,7 @@
         :Parameters:
           - `tid`: the storage-level id of the transaction that committed
           - `oids`: oids is a set of oids, represented as a dict with oids
-            as keys. 
+            as keys.
         """
         self._inv_lock.acquire()
         try:
@@ -649,7 +648,7 @@
             # There is some old Zope code that assigns _p_jar
             # directly.  That is no longer allowed, but we need to
             # provide support for old code that still does it.
-            
+
             # XXX The actual complaint here is that an object without
             # an oid is being registered.  I can't think of any way to
             # achieve that without assignment to _p_jar.  If there is
@@ -791,7 +790,7 @@
         to other peristent objects are handled.
 
         :return: a persistent object
-        
+
         :Parameters:
           - `obj`: a persistent object from this Connection.
           - `tid`: id of a transaction that wrote an earlier revision.
@@ -840,7 +839,7 @@
 
     def tpc_begin(self, transaction, sub=False):
         self._modified = []
-        
+
         # _creating is a list of oids of new objects, which is used to
         # remove them from the cache if a transaction aborts.
         self._creating = []




More information about the Zope3-Checkins mailing list