[Zodb-checkins] SVN: ZODB/branches/blob-merge-branch/src/ZODB/Blobs/ Windows compatibility: Closing filehandles, part 2. The

Wolfgang Schnerring wosc at wosc.de
Mon Sep 25 05:44:30 EDT 2006


Log message for revision 70361:
  Windows compatibility: Closing filehandles, part 2. The
  BlobDataManager needs to close all filehandles of the Blob before the
  Connection commits, so the files can then safely be renamed.
  
  Refactored BlobDataManager to use tpc_* protocol instead of
  zodb-4-style protocol.
  

Changed:
  U   ZODB/branches/blob-merge-branch/src/ZODB/Blobs/Blob.py
  U   ZODB/branches/blob-merge-branch/src/ZODB/Blobs/tests/transaction.txt

-=-
Modified: ZODB/branches/blob-merge-branch/src/ZODB/Blobs/Blob.py
===================================================================
--- ZODB/branches/blob-merge-branch/src/ZODB/Blobs/Blob.py	2006-09-25 09:35:35 UTC (rev 70360)
+++ ZODB/branches/blob-merge-branch/src/ZODB/Blobs/Blob.py	2006-09-25 09:44:29 UTC (rev 70361)
@@ -179,7 +179,7 @@
 
 
 class BlobDataManager:
-    """Special data managerto handle transaction boundaries for blobs.
+    """Special data manager to handle transaction boundaries for blobs.
 
     Blobs need some special care-taking on transaction boundaries. As
 
@@ -220,17 +220,13 @@
     # IDataManager
 
     def tpc_begin(self, transaction):
-        pass
+        if self.prepared:
+            raise TypeError('Already prepared')
+        self._checkTransaction(transaction)
+        self.prepared = True
+        self.transaction = transaction
+        self.fhrefs.map(lambda fhref: fhref.close())
 
-    def tpc_abort(self, transaction):
-        pass
-
-    def tpc_finish(self, transaction):
-        pass
-
-    def tpc_vote(self, transaction):
-        pass
-
     def commit(self, transaction):
         if not self.prepared:
             raise TypeError('Not prepared to commit')
@@ -239,9 +235,11 @@
         self.prepared = False
 
         self.blob._p_blob_clear() 
-        self.fhrefs.map(lambda fhref: fhref.close())
 
     def abort(self, transaction):
+        self.tpc_abort(transaction)
+
+    def tpc_abort(self, transaction):
         self._checkTransaction(transaction)
         if self.transaction is not None:
             self.transaction = None
@@ -249,16 +247,15 @@
 
         self._remove_uncommitted_data()
 
+    def tpc_finish(self, transaction):
+        pass
+
+    def tpc_vote(self, transaction):
+        pass
+
     def sortKey(self):
         return self.sortkey
 
-    def prepare(self, transaction):
-        if self.prepared:
-            raise TypeError('Already prepared')
-        self._checkTransaction(transaction)
-        self.prepared = True
-        self.transaction = transaction
-
     def _checkTransaction(self, transaction):
         if (self.transaction is not None and
             self.transaction is not transaction):

Modified: ZODB/branches/blob-merge-branch/src/ZODB/Blobs/tests/transaction.txt
===================================================================
--- ZODB/branches/blob-merge-branch/src/ZODB/Blobs/tests/transaction.txt	2006-09-25 09:35:35 UTC (rev 70360)
+++ ZODB/branches/blob-merge-branch/src/ZODB/Blobs/tests/transaction.txt	2006-09-25 09:44:29 UTC (rev 70361)
@@ -231,7 +231,7 @@
     >>> savepoint = transaction.savepoint()             # doctest: +ELLIPSIS
     Traceback (most recent call last):
         ...
-    TypeError: ('Savepoints unsupported', <transaction._transaction.DataManagerAdapter object at 0x...>)
+    TypeError: ('Savepoints unsupported', <ZODB.Blobs.Blob.BlobDataManager instance at 0x...>)
 
 
 Teardown



More information about the Zodb-checkins mailing list