From 70ad9b9b309575134834757468cb32c9e3b87448 Mon Sep 17 00:00:00 2001 From: Joshua Watt Date: Mon, 4 Dec 2023 09:03:43 -0700 Subject: [PATCH] bitbake: hashserv: sqlite: Ensure sync propagates to database connections When the sqlite database backend was restructured, the code to make the databases run in WAL mode and to control if sync() is called was accidentally dropped. This caused terrible database performance to the point that server timeouts were occurring causing really slow builds. Fix this by properly enabling WAL mode and setting the synchronous flag as requested (Bitbake rev: c5b8c91d325ed1ca8abe5fe28d989693555c0622) Signed-off-by: Joshua Watt Signed-off-by: Richard Purdie --- bitbake/lib/hashserv/sqlite.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bitbake/lib/hashserv/sqlite.py b/bitbake/lib/hashserv/sqlite.py index f65036be93..f93cb2c1dd 100644 --- a/bitbake/lib/hashserv/sqlite.py +++ b/bitbake/lib/hashserv/sqlite.py @@ -109,11 +109,11 @@ class DatabaseEngine(object): ) def connect(self, logger): - return Database(logger, self.dbname) + return Database(logger, self.dbname, self.sync) class Database(object): - def __init__(self, logger, dbname, sync=True): + def __init__(self, logger, dbname, sync): self.dbname = dbname self.logger = logger @@ -121,6 +121,11 @@ class Database(object): self.db.row_factory = sqlite3.Row with closing(self.db.cursor()) as cursor: + cursor.execute("PRAGMA journal_mode = WAL") + cursor.execute( + "PRAGMA synchronous = %s" % ("NORMAL" if sync else "OFF") + ) + cursor.execute("SELECT sqlite_version()") version = []