summaryrefslogtreecommitdiff
path: root/searx/sqlitedb.py
diff options
context:
space:
mode:
authorBrock Vojkovic <git@vojk.au>2026-06-07 12:04:12 +0800
committerGitHub <noreply@github.com>2026-06-07 06:04:12 +0200
commit9d49a9f344f17b069ba8e6b6720db74991e7ca4b (patch)
treee7e9df1ac8a9c10466fc061dc733e3b6cea22b27 /searx/sqlitedb.py
parente260a732c83693cbe9be5916b7703cb1d0326bb7 (diff)
[fix] no such table during engine init (#6185)
Diffstat (limited to 'searx/sqlitedb.py')
-rw-r--r--searx/sqlitedb.py20
1 files changed, 14 insertions, 6 deletions
diff --git a/searx/sqlitedb.py b/searx/sqlitedb.py
index a4f498339..de6f1b803 100644
--- a/searx/sqlitedb.py
+++ b/searx/sqlitedb.py
@@ -327,7 +327,6 @@ class SQLiteAppl(abc.ABC):
if self._init_done:
return False
- self._init_done = True
logger.debug("init DB: %s", self.db_url)
self.properties.init(conn)
@@ -342,6 +341,7 @@ class SQLiteAppl(abc.ABC):
raise sqlite3.DatabaseError("Expected DB schema v%s, DB schema is v%s" % (self.DB_SCHEMA, ver))
logger.debug("DB_SCHEMA = %s", ver)
+ self._init_done = True
return True
def create_schema(self, conn: sqlite3.Connection):
@@ -369,6 +369,9 @@ class SQLiteProperties(SQLiteAppl):
"""
+ _locks: dict[str, threading.Lock] = {}
+ _locks_lock = threading.Lock()
+
SQLITE_JOURNAL_MODE: str = "WAL"
DDL_PROPERTIES: str = """\
@@ -406,11 +409,16 @@ CREATE TABLE IF NOT EXISTS properties (
if self._init_done:
return False
- self._init_done = True
- logger.debug("init properties of DB: %s", self.db_url)
- res = conn.execute(self.SQL_TABLE_EXISTS)
- if res.fetchone() is None: # DB schema needs to be be created
- self.create_schema(conn)
+ with self._locks_lock:
+ db_lock = self._locks.setdefault(self.db_url, threading.Lock())
+ with db_lock:
+ if self._init_done:
+ return False
+ logger.debug("init properties of DB: %s", self.db_url)
+ res = conn.execute(self.SQL_TABLE_EXISTS)
+ if res.fetchone() is None: # DB schema needs to be be created
+ self.create_schema(conn)
+ self._init_done = True
return True
def __call__(self, name: str, default: t.Any = None) -> t.Any: