diff options
| author | Brock Vojkovic <git@vojk.au> | 2026-06-07 12:04:12 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-06-07 06:04:12 +0200 |
| commit | 9d49a9f344f17b069ba8e6b6720db74991e7ca4b (patch) | |
| tree | e7e9df1ac8a9c10466fc061dc733e3b6cea22b27 /searx/sqlitedb.py | |
| parent | e260a732c83693cbe9be5916b7703cb1d0326bb7 (diff) | |
[fix] no such table during engine init (#6185)
Diffstat (limited to 'searx/sqlitedb.py')
| -rw-r--r-- | searx/sqlitedb.py | 20 |
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: |
