[CalendarServer-changes] [9732] CalendarServer/trunk/twistedcaldav/database.py

source_changes at macosforge.org source_changes at macosforge.org
Mon Aug 20 11:21:08 PDT 2012


Revision: 9732
          http://trac.macosforge.org/projects/calendarserver/changeset/9732
Author:   sagen at apple.com
Date:     2012-08-20 11:21:06 -0700 (Mon, 20 Aug 2012)
Log Message:
-----------
Clean up the connection pool if there is an error during open()

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/database.py

Modified: CalendarServer/trunk/twistedcaldav/database.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/database.py	2012-08-20 16:56:53 UTC (rev 9731)
+++ CalendarServer/trunk/twistedcaldav/database.py	2012-08-20 18:21:06 UTC (rev 9732)
@@ -107,31 +107,37 @@
             #
             # Create CALDAV table if needed
 
-            test = (yield self._test_schema_table())
-            if test:
-                version = (yield self._db_value_for_sql("select VALUE from CALDAV where KEY = 'SCHEMA_VERSION'"))
-                dbtype = (yield self._db_value_for_sql("select VALUE from CALDAV where KEY = 'TYPE'"))
+            try:
+                test = (yield self._test_schema_table())
+                if test:
+                    version = (yield self._db_value_for_sql("select VALUE from CALDAV where KEY = 'SCHEMA_VERSION'"))
+                    dbtype = (yield self._db_value_for_sql("select VALUE from CALDAV where KEY = 'TYPE'"))
 
-                if (version != self._db_version()) or (dbtype != self._db_type()):
+                    if (version != self._db_version()) or (dbtype != self._db_type()):
 
-                    if dbtype != self._db_type():
-                        log.err("Database %s has different type (%s vs. %s)"
-                                % (self.dbID, dbtype, self._db_type()))
+                        if dbtype != self._db_type():
+                            log.err("Database %s has different type (%s vs. %s)"
+                                    % (self.dbID, dbtype, self._db_type()))
 
-                        # Delete this index and start over
-                        yield self._db_remove()
-                        yield self._db_init()
+                            # Delete this index and start over
+                            yield self._db_remove()
+                            yield self._db_init()
 
-                    elif version != self._db_version():
-                        log.err("Database %s has different schema (v.%s vs. v.%s)"
-                                % (self.dbID, version, self._db_version()))
-                        
-                        # Upgrade the DB
-                        yield self._db_upgrade(version)
+                        elif version != self._db_version():
+                            log.err("Database %s has different schema (v.%s vs. v.%s)"
+                                    % (self.dbID, version, self._db_version()))
+                            
+                            # Upgrade the DB
+                            yield self._db_upgrade(version)
 
-            else:
-                yield self._db_init()
-            self.initialized = True
+                else:
+                    yield self._db_init()
+                self.initialized = True
+            except:
+                # Clean up upon error so we don't end up leaking threads
+                self.pool.close()
+                self.pool = None
+                raise
 
     def close(self):
         
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120820/554e1624/attachment-0001.html>


More information about the calendarserver-changes mailing list