[CalendarServer-changes] [6534] CalendarServer/branches/users/glyph/sharedpool/txdav/base/datastore/ asyncsqlpool.py

source_changes at macosforge.org source_changes at macosforge.org
Mon Nov 1 14:26:30 PDT 2010


Revision: 6534
          http://trac.macosforge.org/projects/calendarserver/changeset/6534
Author:   glyph at apple.com
Date:     2010-11-01 14:26:27 -0700 (Mon, 01 Nov 2010)
Log Message:
-----------
normalize completion-checking

Modified Paths:
--------------
    CalendarServer/branches/users/glyph/sharedpool/txdav/base/datastore/asyncsqlpool.py

Modified: CalendarServer/branches/users/glyph/sharedpool/txdav/base/datastore/asyncsqlpool.py
===================================================================
--- CalendarServer/branches/users/glyph/sharedpool/txdav/base/datastore/asyncsqlpool.py	2010-11-01 21:26:03 UTC (rev 6533)
+++ CalendarServer/branches/users/glyph/sharedpool/txdav/base/datastore/asyncsqlpool.py	2010-11-01 21:26:27 UTC (rev 6534)
@@ -20,6 +20,7 @@
 """
 
 import sys
+
 from cStringIO import StringIO
 from cPickle import dumps, loads
 from itertools import count
@@ -148,9 +149,12 @@
         Release the thread and database connection associated with this
         transaction.
         """
+        self._completed = True
         self._stopped = True
-        self._holder.submit(self._connection.close)
-        return self._holder.stop()
+        holder = self._holder
+        self._holder = None
+        holder.submit(self._connection.close)
+        return holder.stop()
 
 
 
@@ -170,23 +174,34 @@
 
 
     def execSQL(self, *a, **kw):
-        if self._complete:
-            raise AlreadyFinishedError()
+        self._checkComplete()
         return super(PooledSqlTxn, self).execSQL(*a, **kw)
 
 
     def commit(self):
-        if self._complete:
-            raise AlreadyFinishedError()
-        self._complete = True
+        self._markComplete()
         return self._repoolAfter(super(PooledSqlTxn, self).commit())
 
 
     def abort(self):
+        self._markComplete()
+        return self._repoolAfter(super(PooledSqlTxn, self).abort())
+
+
+    def _checkComplete(self):
+        """
+        If the transaction is complete, raise L{AlreadyFinishedError}
+        """
         if self._complete:
             raise AlreadyFinishedError()
+
+
+    def _markComplete(self):
+        """
+        Mark the transaction as complete, raising AlreadyFinishedError.
+        """
+        self._checkComplete()
         self._complete = True
-        return self._repoolAfter(super(PooledSqlTxn, self).abort())
 
 
     def _repoolAfter(self, d):
@@ -234,7 +249,7 @@
             yield free.stop()
 
 
-    def connection(self):
+    def connection(self, label="<unlabeled>"):
         """
         Find a transaction; either retrieve a free one from the list or
         allocate a new one if no free ones are available.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20101101/2e67609a/attachment-0001.html>


More information about the calendarserver-changes mailing list