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

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Oct 26 11:44:57 CEST 2010


Author: gregory
Date: Tue Oct 26 11:44:56 2010
New Revision: 2356

Log:
Keep track of store order.

This is required to export data from NEO as done by FileStorage.

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] Tue Oct 26 11:44:56 2010
@@ -102,6 +102,7 @@ class ThreadContext(object):
             'tid': None,
             'txn': None,
             'data_dict': {},
+            'data_list': [],
             'object_serial_dict': {},
             'object_stored_counter_dict': {},
             'conflict_serial_dict': {},
@@ -632,7 +633,11 @@ class Application(object):
                  checksum, compressed_data, data_serial, self.local_var.tid)
         on_timeout = OnTimeout(self.onStoreTimeout, self.local_var.tid, oid)
         # Store object in tmp cache
-        self.local_var.data_dict[oid] = data
+        local_var = self.local_var
+        data_dict = local_var.data_dict
+        if oid not in data_dict:
+            local_var.data_list.append(oid)
+        data_dict[oid] = data
         # Store data on each node
         self.local_var.object_stored_counter_dict[oid] = {}
         self.local_var.object_serial_dict[oid] = serial
@@ -705,6 +710,7 @@ class Application(object):
             if not resolved:
                 # XXX: Is it really required to remove from data_dict ?
                 del data_dict[oid]
+                local_var.data_list.remove(oid)
                 raise ConflictError(oid=oid,
                     serials=(tid, serial), data=data)
         return result
@@ -763,7 +769,7 @@ class Application(object):
         voted_counter = 0
         p = Packets.AskStoreTransaction(tid, str(transaction.user),
             str(transaction.description), dumps(transaction._extension),
-            local_var.data_dict.keys())
+            local_var.data_list)
         add_involved_nodes = self.local_var.involved_nodes.add
         for cell in self._getCellListForTID(tid, writable=True):
             logging.debug("voting object %s %s", cell.getAddress(),
@@ -845,7 +851,7 @@ class Application(object):
                 f(tid)
 
             # Call finish on master
-            oid_list = self.local_var.data_dict.keys()
+            oid_list = self.local_var.data_list
             p = Packets.AskFinishTransaction(tid, oid_list)
             self._askPrimary(p)
 

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] Tue Oct 26 11:44:56 2010
@@ -463,6 +463,7 @@ class ClientApplicationTests(NeoTestBase
         app.nm.createStorage(address=storage_address)
         app.local_var.object_stored = (oid, tid)
         app.local_var.data_dict[oid] = 'BEFORE'
+        app.local_var.data_list.append(oid)
         app.store(oid, tid, '', None, txn)
         app.local_var.queue.put((conn, packet))
         self.assertRaises(ConflictError, app.waitStoreResponses,





More information about the Neo-report mailing list