summaryrefslogtreecommitdiff
path: root/searx/search
diff options
context:
space:
mode:
authorMarkus Heiser <markus.heiser@darmarIT.de>2026-06-10 15:48:49 +0200
committerGitHub <noreply@github.com>2026-06-10 15:48:49 +0200
commit26801e92af55cfef264fc34f0b84473e5bfc94cd (patch)
tree9b6c74c81751f2248594029d65b2afbe207f3c26 /searx/search
parentf3fab143be3069bbcdcec9169bcf6ee030437a61 (diff)
[fix] sqlitedb: create DB Schema (DDL) during app initialization (hardening) (#6187)
The initialization of the DB schema ("base schema") has so far been done on demand, which causes race conditions with competing threads and processes. The DDL statements for creating the "base schema" are now executed as part of the initialization of the app. Further improvements were made to harden the database applications: - Wikidata & Radio-Browser engine perform their initialization only once (so far the initialization was carried out in each thread/process). - If multiple processes try to set DB's WAL mode when opening the DB at the same time, this usually leads to another race condition, which is now also caught. Related: - https://github.com/searxng/searxng/issues/6181#issuecomment-4586705 Closes: #6181 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Diffstat (limited to 'searx/search')
-rw-r--r--searx/search/processors/abstract.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/searx/search/processors/abstract.py b/searx/search/processors/abstract.py
index cc19077b2..a504cdcba 100644
--- a/searx/search/processors/abstract.py
+++ b/searx/search/processors/abstract.py
@@ -3,6 +3,7 @@
import typing as t
+import os
import logging
import threading
from abc import abstractmethod, ABC
@@ -154,7 +155,9 @@ class EngineProcessor(ABC):
try:
init_ok = self.engine.init(eng_setting)
except Exception: # pylint: disable=broad-except
- logger.exception("Init method of engine %s failed due to an exception.", self.engine.name)
+ logger.exception(
+ f"(PID {os.getpid()}) Init method of engine %s failed due to an exception.", self.engine.name
+ )
init_ok = False
# In older engines, None is returned from the init method, which is
# equivalent to indicating that the initialization was successful.