[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