[Zodb-checkins] CVS: ZODB3/ZODB - Connection.py:1.76.4.6
Jeremy Hylton
jeremy at zope.com
Mon Jun 9 15:34:07 EDT 2003
Update of /cvs-repository/ZODB3/ZODB
In directory cvs.zope.org:/tmp/cvs-serv27243
Modified Files:
Tag: ZODB3-3_1-branch
Connection.py
Log Message:
Critical bug fix: Invalidate object when conflict resolution occurs.
=== ZODB3/ZODB/Connection.py 1.76.4.5 => 1.76.4.6 ===
--- ZODB3/ZODB/Connection.py:1.76.4.5 Wed Apr 30 17:26:15 2003
+++ ZODB3/ZODB/Connection.py Mon Jun 9 14:34:06 2003
@@ -694,19 +694,26 @@
# tpc_vote() calls already did this. The change=1 argument
# exists to allow commit_sub() to avoid setting the flag
# again.
+
+ # When conflict resolution occurs, the object state held by
+ # the connection does not match what is written to the
+ # database. Invalidate the object here to guarantee that
+ # the new state is read the next time the object is used.
+
if not store_return:
return
if isinstance(store_return, StringType):
+ # This code is duplicated in the body of the for loop below.
assert oid is not None
serial = store_return
obj = self._cache.get(oid, None)
if obj is None:
return
if serial == ResolvedSerial:
- obj._p_changed = None
+ del obj._p_changed # transition from changed to ghost
else:
if change:
- obj._p_changed = 0
+ obj._p_changed = 0 # transition from changed to uptodate
obj._p_serial = serial
else:
for oid, serial in store_return:
@@ -716,10 +723,10 @@
if obj is None:
continue
if serial == ResolvedSerial:
- obj._p_changed = None
+ del obj._p_changed # transition from changed to ghost
else:
if change:
- obj._p_changed = 0
+ obj._p_changed = 0 # trans. from changed to uptodate
obj._p_serial = serial
def tpc_finish(self, transaction):
More information about the Zodb-checkins
mailing list