From 61c72ac3ea621bcf0854061fff111bd88d977998 Mon Sep 17 00:00:00 2001 From: shortcutme Date: Mon, 18 Mar 2019 03:36:12 +0100 Subject: [PATCH] Fix SQLite concurrency errors --- src/Db/Db.py | 9 ++++++++- src/Db/DbCursor.py | 13 ++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/Db/Db.py b/src/Db/Db.py index cda243a5..b6603a7a 100644 --- a/src/Db/Db.py +++ b/src/Db/Db.py @@ -56,6 +56,7 @@ class Db(object): self.schema["version"] = self.schema.get("version", 1) self.conn = None self.cur = None + self.progress_sleeping = False self.log = logging.getLogger("Db:%s" % schema["db_name"]) self.table_names = None self.collect_stats = False @@ -92,7 +93,9 @@ class Db(object): ) def progress(self, *args, **kwargs): - gevent.sleep() + self.progress_sleeping = True + time.sleep(0.001) + self.progress_sleeping = False # Execute query using dbcursor def execute(self, query, params=None): @@ -101,6 +104,10 @@ class Db(object): return self.cur.execute(query, params) def commit(self, reason="Unknown"): + if self.progress_sleeping: + self.log.debug("Commit ignored: Progress sleeping") + return False + try: s = time.time() self.conn.commit() diff --git a/src/Db/DbCursor.py b/src/Db/DbCursor.py index 7df7dacb..a50539f8 100644 --- a/src/Db/DbCursor.py +++ b/src/Db/DbCursor.py @@ -84,16 +84,11 @@ class DbCursor: def execute(self, query, params=None): query = query.strip() + while self.db.progress_sleeping: + time.sleep(0.1) + self.db.last_query_time = time.time() - if time.time() - self.db.last_sleep_time > 0.1: - if self.db.num_execute_since_sleep > 100: - gevent.sleep(0.001) - self.db.num_execute_since_sleep = 0 - self.db.last_sleep_time = time.time() - - self.db.num_execute_since_sleep += 1 - query, params = self.parseQuery(query, params) s = time.time() @@ -128,7 +123,7 @@ class DbCursor: params = query_sets params.update(query_wheres) - self.cursor.execute( + self.execute( "UPDATE %s SET %s WHERE %s" % (table, ", ".join(sql_sets), " AND ".join(sql_wheres)), params )