[Neo-report] r2493 vincent - in /trunk/neo/client: Storage.py app.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Dec 9 17:25:18 CET 2010


Author: vincent
Date: Thu Dec  9 17:25:18 2010
New Revision: 2493

Log:
Implement getTID and checkCurrentSerialInTransaction.

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] Thu Dec  9 17:25:18 2010
@@ -194,3 +194,9 @@ class Storage(BaseStorage.BaseStorage,
     def close(self):
         self.app.close()
 
+    def getTID(self, oid):
+        return self.app.getLastTID(oid)
+
+    def checkCurrentSerialInTransaction(self, oid, serial, transaction):
+        self.app.checkCurrentSerialInTransaction(oid, serial, transaction)
+

Modified: trunk/neo/client/app.py
==============================================================================
--- trunk/neo/client/app.py [iso-8859-1] (original)
+++ trunk/neo/client/app.py [iso-8859-1] Thu Dec  9 17:25:18 2010
@@ -24,6 +24,7 @@ import time
 import os
 
 from ZODB.POSException import UndoError, StorageTransactionError, ConflictError
+from ZODB.POSException import ReadConflictError
 from ZODB.ConflictResolution import ResolvedSerial
 from persistent.TimeStamp import TimeStamp
 
@@ -1260,3 +1261,13 @@ class Application(object):
             raise NEOStorageError('Invalid pack time')
         self._askPrimary(Packets.AskPack(tid))
 
+    def getLastTID(self, oid):
+        return self._load(oid)[1]
+
+    def checkCurrentSerialInTransaction(self, oid, serial, transaction):
+        if transaction is not self.local_var.txn:
+              raise StorageTransactionError(self, transaction)
+        committed_tid = self.getLastTID(oid)
+        if committed_tid != serial:
+            raise ReadConflictError(oid=oid, serials=(committed_tid, serial))
+




More information about the Neo-report mailing list