From 26e3abb9d71efd49b32a60ccb872e554a272cf69 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20K=C3=A1cha?= <ph@cesnet.cz>
Date: Fri, 23 Jun 2017 15:56:59 +0200
Subject: [PATCH] (Hopefully) more robust database reconnection

---
 warden3/warden_server/warden_server.py | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py
index fa279b7..bed5b60 100755
--- a/warden3/warden_server/warden_server.py
+++ b/warden3/warden_server/warden_server.py
@@ -527,6 +527,8 @@ class MySQL(ObjectBase):
         crs = kwargs.pop("crs", None)
         while True:
             try:
+                if self.con is None:
+                    self.connect()
                 if crs is None:
                     crs = self.con.cursor()
                 self.log.debug("execute: %s %s" % (args, kwargs))
@@ -540,9 +542,16 @@ class MySQL(ObjectBase):
                 self.log.info("execute: Database down, trying to reconnect (%d attempts left)..." % countdown)
                 if countdown<self.retry_count:
                     sleep(self.retry_pause)    # no need to melt down server on longer outage
-                self.close()
-                self.connect()
+                try:
+                    crs.close()
+                except Exception:
+                    pass
+                try:
+                    self.close()
+                except Exception:
+                    pass
                 crs = None
+                self.con = None
                 countdown -= 1
 
 
-- 
GitLab