diff options
Diffstat (limited to 'bitbake/lib/prserv')
-rw-r--r-- | bitbake/lib/prserv/db.py | 14 | ||||
-rw-r--r-- | bitbake/lib/prserv/serv.py | 7 |
2 files changed, 21 insertions, 0 deletions
diff --git a/bitbake/lib/prserv/db.py b/bitbake/lib/prserv/db.py index 49f36da1ad..3bdc04692e 100644 --- a/bitbake/lib/prserv/db.py +++ b/bitbake/lib/prserv/db.py @@ -19,6 +19,7 @@ class PRTable(object): def __init__(self, conn, table, nohist): self.conn = conn self.nohist = nohist + self.dirty = False if nohist: self.table = "%s_nohist" % table else: @@ -47,6 +48,11 @@ class PRTable(object): self.conn.commit() self._execute("BEGIN EXCLUSIVE TRANSACTION") + def sync_if_dirty(self): + if self.dirty: + self.sync() + self.dirty = False + def _getValueHist(self, version, pkgarch, checksum): data=self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table, (version, pkgarch, checksum)) @@ -62,6 +68,8 @@ class PRTable(object): except sqlite3.IntegrityError as exc: logger.error(str(exc)) + self.dirty = True + data=self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table, (version, pkgarch, checksum)) row=data.fetchone() @@ -89,6 +97,8 @@ class PRTable(object): logger.error(str(exc)) self.conn.rollback() + self.dirty = True + data=self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table, (version, pkgarch, checksum)) row=data.fetchone() @@ -118,6 +128,8 @@ class PRTable(object): except sqlite3.IntegrityError as exc: logger.error(str(exc)) + self.dirty = True + data = self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table, (version, pkgarch, checksum)) row = data.fetchone() @@ -139,6 +151,8 @@ class PRTable(object): except sqlite3.IntegrityError as exc: logger.error(str(exc)) + self.dirty = True + data = self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=? AND value>=?;" % self.table, (version,pkgarch,checksum,value)) row=data.fetchone() diff --git a/bitbake/lib/prserv/serv.py b/bitbake/lib/prserv/serv.py index 1b08d59130..6ab10972e7 100644 --- a/bitbake/lib/prserv/serv.py +++ b/bitbake/lib/prserv/serv.py @@ -122,6 +122,10 @@ class PRServer(SimpleXMLRPCServer): def work_forever(self,): self.quit = False self.timeout = 0.5 + iter_count = 1 + # With 60 iterations between syncs and a 0.5 second timeout between + # iterations, this will sync if dirty every ~30 seconds. + iterations_between_sync = 60 logger.info("Started PRServer with DBfile: %s, IP: %s, PORT: %s, PID: %s" % (self.dbfile, self.host, self.port, str(os.getpid()))) @@ -129,6 +133,9 @@ class PRServer(SimpleXMLRPCServer): self.handlerthread.start() while not self.quit: self.handle_request() + iter_count = (iter_count + 1) % iterations_between_sync + if iter_count == 0: + self.table.sync_if_dirty() self.table.sync() logger.info("PRServer: stopping...") |