X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-dns.git/blobdiff_plain/1e70b52800ada85379677ed2f6418453d1a85f3e..25a7a3668877aea61fbf110673f5a5d2f9a464ee:/code/dnsserver.py 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)):