[Neo-report] r2595 vincent - in /trunk/neo: client/app.py tests/client/testClientApp.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jan 6 15:08:55 CET 2011


Author: vincent
Date: Thu Jan  6 15:08:55 2011
New Revision: 2595

Log:
Do not work on local_var.conflict_serial_dict when resolving conflicts.

If a conflict gets reported while handling a previously-reported conflict
on the same object, second conflict is dropped on
  conflict_serial_dict.pop()
before it is handled.

Modified:
    trunk/neo/client/app.py
    trunk/neo/tests/client/testClientApp.py

Modified: trunk/neo/client/app.py
==============================================================================
--- trunk/neo/client/app.py [iso-8859-1] (original)
+++ trunk/neo/client/app.py [iso-8859-1] Thu Jan  6 15:08:55 2011
@@ -761,15 +761,16 @@ class Application(object):
         # Check for conflicts
         data_dict = local_var.data_dict
         object_serial_dict = local_var.object_serial_dict
-        conflict_serial_dict = local_var.conflict_serial_dict
+        conflict_serial_dict = local_var.conflict_serial_dict.copy()
+        local_var.conflict_serial_dict.clear()
         resolved_conflict_serial_dict = local_var.resolved_conflict_serial_dict
-        for oid, conflict_serial_set in conflict_serial_dict.items():
+        for oid, conflict_serial_set in conflict_serial_dict.iteritems():
             resolved_serial_set = resolved_conflict_serial_dict.setdefault(
                 oid, set())
             conflict_serial = max(conflict_serial_set)
             if resolved_serial_set and conflict_serial <= max(resolved_serial_set):
                 # A later serial has already been resolved, skip.
-                resolved_serial_set.update(conflict_serial_dict.pop(oid))
+                resolved_serial_set.update(conflict_serial_set)
                 continue
             serial = object_serial_dict[oid]
             data = data_dict[oid]
@@ -783,8 +784,7 @@ class Application(object):
                         '%r:%r with %r', dump(oid), dump(serial),
                         dump(conflict_serial))
                     # Mark this conflict as resolved
-                    resolved_serial_set.update(conflict_serial_dict.pop(
-                        oid))
+                    resolved_serial_set.update(conflict_serial_set)
                     # Try to store again
                     self._store(oid, conflict_serial, new_data)
                     append(oid)

Modified: trunk/neo/tests/client/testClientApp.py
==============================================================================
--- trunk/neo/tests/client/testClientApp.py [iso-8859-1] (original)
+++ trunk/neo/tests/client/testClientApp.py [iso-8859-1] Thu Jan  6 15:08:55 2011
@@ -482,7 +482,6 @@ class ClientApplicationTests(NeoUnitTest
         self.assertRaises(ConflictError, app.waitStoreResponses,
             failing_tryToResolveConflict)
         self.assertTrue(oid not in app.local_var.data_dict)
-        self.assertEquals(app.local_var.conflict_serial_dict[oid], set([tid, ]))
         self.assertEquals(app.local_var.object_stored_counter_dict[oid], {})
         self.checkAskStoreObject(conn)
 




More information about the Neo-report mailing list