From: Eric Price Date: Sat, 29 Mar 2008 02:19:05 +0000 (-0400) Subject: Work around stale database connections (#4) in the DNS server X-Git-Tag: sipb-xen-dns/1~3 X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-dns.git/commitdiff_plain/79e0bc6eedfb4d70785e22f17d063bc57a0f67d0?ds=sidebyside Work around stale database connections (#4) in the DNS server svn path=/trunk/packages/sipb-xen-dns/; revision=302 --- diff --git a/code/dnsserver.py b/code/dnsserver.py index b6a5ac3..0cad87a 100755 --- a/code/dnsserver.py +++ b/code/dnsserver.py @@ -7,6 +7,9 @@ from twisted.internet import defer from twisted.python import failure import sipb_xen_database +import psycopg2 +import sqlalchemy +import time class DatabaseAuthority(common.ResolverBase): """An Authority that is loaded from a file.""" @@ -23,6 +26,19 @@ class DatabaseAuthority(common.ResolverBase): serial=1, refresh=3600, retry=900, expire=3600000, minimum=21600, ttl=3600) def _lookup(self, name, cls, type, timeout = None): + for i in range(3): + try: + value = self._lookup_unsafe(name, cls, type, timeout = None) + except (psycopg2.OperationalError, sqlalchemy.exceptions.SQLError): + if i == 2: + raise + print "Reloading database" + time.sleep(0.5) + continue + else: + return value + + def _lookup_unsafe(self, name, cls, type, timeout): sipb_xen_database.clear_cache() if not (name.lower() == self.domain or name.lower().endswith('.'+self.domain)):