[CalendarServer-changes] [6002] CalendarServer/branches/users/wsanchez/deployment/twistedcaldav/ database.py

source_changes at macosforge.org source_changes at macosforge.org
Fri Aug 6 12:44:20 PDT 2010


Revision: 6002
          http://trac.macosforge.org/projects/calendarserver/changeset/6002
Author:   cdaboo at apple.com
Date:     2010-08-06 12:44:20 -0700 (Fri, 06 Aug 2010)
Log Message:
-----------
Re-try DB query one time as a pooled connection may have gone away.

Modified Paths:
--------------
    CalendarServer/branches/users/wsanchez/deployment/twistedcaldav/database.py

Modified: CalendarServer/branches/users/wsanchez/deployment/twistedcaldav/database.py
===================================================================
--- CalendarServer/branches/users/wsanchez/deployment/twistedcaldav/database.py	2010-08-06 19:42:24 UTC (rev 6001)
+++ CalendarServer/branches/users/wsanchez/deployment/twistedcaldav/database.py	2010-08-06 19:44:20 UTC (rev 6002)
@@ -134,59 +134,113 @@
     def close(self):
         
         if self.initialized:
-            self.pool.close()
+            try:
+                self.pool.close()
+            except Exception, e:
+                log.err("Error whilst closing connection pool: %s" % (e,))
             self.pool = None
             self.initialized = False
 
     @inlineCallbacks
     def clean(self):
         
-        if not self.initialized:
-            yield self.open()
+        # Re-try at least once
+        for _ignore in (0, 1):
+            if not self.initialized:
+                yield self.open()
 
-        yield self._db_empty_data_tables()
+            try:
+                yield self._db_empty_data_tables()
+            except Exception, e:
+                log.err("Error in database clean: %s" % (e,))
+                self.close()
+            else:
+                break
 
     @inlineCallbacks
     def execute(self, sql, *query_params):
         
-        if not self.initialized:
-            yield self.open()
+        # Re-try at least once
+        for _ignore in (0, 1):
+            if not self.initialized:
+                yield self.open()
+    
+            try:
+                yield self._db_execute(sql, *query_params)
+            except Exception, e:
+                log.err("Error in database execute: %s" % (e,))
+                self.close()
+            else:
+                break
 
-        yield self._db_execute(sql, *query_params)
-
     @inlineCallbacks
     def executescript(self, script):
         
-        if not self.initialized:
-            yield self.open()
+        # Re-try at least once
+        for _ignore in (0, 1):
+            if not self.initialized:
+                yield self.open()
+    
+            try:
+                yield self._db_execute_script(script)
+            except Exception, e:
+                log.err("Error in database executescript: %s" % (e,))
+                self.close()
+            else:
+                break
 
-        yield self._db_execute_script(script)
-
     @inlineCallbacks
     def query(self, sql, *query_params):
         
-        if not self.initialized:
-            yield self.open()
+        # Re-try at least once
+        for _ignore in (0, 1):
+            if not self.initialized:
+                yield self.open()
+    
+            try:
+                result = (yield self._db_all_values_for_sql(sql, *query_params))
+            except Exception, e:
+                log.err("Error in database query: %s" % (e,))
+                self.close()
+            else:
+                break
 
-        result = (yield self._db_all_values_for_sql(sql, *query_params))
         returnValue(result)
 
     @inlineCallbacks
     def queryList(self, sql, *query_params):
         
-        if not self.initialized:
-            yield self.open()
+        # Re-try at least once
+        for _ignore in (0, 1):
+            if not self.initialized:
+                yield self.open()
+            
+            try:
+                result = (yield self._db_values_for_sql(sql, *query_params))
+            except Exception, e:
+                log.err("Error in database queryList: %s" % (e,))
+                self.close()
+            else:
+                break
 
-        result = (yield self._db_values_for_sql(sql, *query_params))
         returnValue(result)
 
     @inlineCallbacks
     def queryOne(self, sql, *query_params):
         
-        if not self.initialized:
-            yield self.open()
+        # Re-try at least once
+        for _ignore in (0, 1):
+            if not self.initialized:
+                yield self.open()
+    
+            try:
+                result = (yield self._db_value_for_sql(sql, *query_params))
+            except Exception, e:
+                log.err("Error in database queryOne: %s" % (e,))
+                self.close()
+            else:
+                break
 
-        result = (yield self._db_value_for_sql(sql, *query_params))
         returnValue(result)
 
     def _db_version(self):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100806/07dc35b6/attachment.html>


More information about the calendarserver-changes mailing list