X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-dns.git/blobdiff_plain/fbabf89bd5bbb2d312d68e8841b692421cb7a08e..79e0bc6eedfb4d70785e22f17d063bc57a0f67d0:/code/dnsserver.py diff --git a/code/dnsserver.py b/code/dnsserver.py old mode 100644 new mode 100755 index 3cc8dc5..0cad87a --- 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,20 @@ 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)): #Not us