[Neo-report] r1908 gregory - in /trunk/neo/client: Storage.py app.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Mar 5 22:24:42 CET 2010


Author: gregory
Date: Fri Mar  5 22:24:41 2010
New Revision: 1908

Log:
Implement our own copyTransactionFrom().

Modified:
    trunk/neo/client/Storage.py
    trunk/neo/client/app.py

Modified: trunk/neo/client/Storage.py
==============================================================================
--- trunk/neo/client/Storage.py [iso-8859-1] (original)
+++ trunk/neo/client/Storage.py [iso-8859-1] Fri Mar  5 22:24:41 2010
@@ -136,6 +136,9 @@
     def sync(self):
         self.app.sync()
 
+    def copyTransactionsFrom(self, source, verbose=False):
+        return self.app.copyTransactionsFrom(source, self.tryToResolveConflict)
+
 #    def restore(self, oid, serial, data, version, prev_txn, transaction):
 #        raise NotImplementedError
 

Modified: trunk/neo/client/app.py
==============================================================================
--- trunk/neo/client/app.py [iso-8859-1] (original)
+++ trunk/neo/client/app.py [iso-8859-1] Fri Mar  5 22:24:41 2010
@@ -981,6 +981,30 @@
 
         return history_list
 
+    def copyTransactionsFrom(self, source, tryToResolveConflict):
+        serials = {}
+        def updateLastSerial(oid, result):
+            if result:
+                if isinstance(result, str):
+                    assert oid is not None
+                    serials[oid] = result
+                else:
+                    for oid, serial in result:
+                        assert isinstance(serial, str), serial
+                        serials[oid] = serial
+        transaction_iter = source.iterator()
+        for transaction in transaction_iter:
+            self.tpc_begin(transaction, transaction.tid, transaction.status)
+            for r in transaction:
+                pre = serials.get(r.oid, None)
+                # TODO: bypass conflict resolution, locks...
+                result = self.store(r.oid, pre, r.data, r.version, transaction)
+                updateLastSerial(r.oid, result)
+            updateLastSerial(None, self.tpc_vote(transaction,
+                        tryToResolveConflict))
+            self.tpc_finish(transaction)
+        transaction_iter.close()
+
     def iterator(self, start=None, stop=None):
         return Iterator(self, start, stop)
 





More information about the Neo-report mailing list