Admin message

Self sign-up has been disabled due to increased spam activity. If you want to get access, please send an email to a project owner (preferred) or at gitlab(at)nic(dot)cz. We apologize for the inconvenience.

This project is archived. Its data is read-only.
Limit the number of DB queries from the main thread
Basically, we want to make the interval we ask for configs and for `now()` longer. The now may use the DB time only to calibrate local clock. This is a proposed diff (with some other changes to report transactions taking a long time, but we may want that too, possibly with a longer time): ``` import threading import traceback import time +import datetime from master_config import get logger = logging.getLogger(name='database') @@ -33,6 +34,7 @@ class __CursorContext: def __init__(self, connection): self.__connection = connection self.__depth = 0 + self.__start_time = None self.reuse() def reuse(self): @@ -41,6 +43,7 @@ class __CursorContext: def __enter__(self): if not self.__depth: logger.debug('Entering transaction %s', self) + self.__start_time = time.time() self.__depth += 1 return self._cursor @@ -48,6 +51,8 @@ class __CursorContext: self.__depth -= 1 if self.__depth: return # Didn't exit all the contexts yet + if time.time() - self.__start_time > 2: + logger.error("Transaction took a long time: %s", traceback.format_stack()) if exc_type: logger.error('Rollback of transaction %s:%s/%s/%s', self, exc_type, exc_val, trace self.__connection.rollback() @@ -115,9 +120,10 @@ def now(): global __time_update global __time_db t = time.time() - if __time_update + 2 < t: + diff = t - __time_update + if diff > 600000: __time_update = t with transaction() as t: t.execute("SELECT CURRENT_TIMESTAMP AT TIME ZONE 'UTC'"); (__time_db,) = t.fetchone() - return __time_db + return __time_db + datetime.timedelta(seconds=diff) ```
issue