From 337ec7309b12423c01e4136650c4a744c49bc6ca Mon Sep 17 00:00:00 2001 From: Antti Kettunen Date: Sat, 11 Apr 2026 14:35:58 +0300 Subject: [PATCH] Initialize the database only once per process Since MusicDatabase is initialized per-thread (which I don't dare to change), we end up needlessly calling _initialize_database for each client that gets created, thus making a ton of redundant db initialization / migration calls over and over again throughout the process' lifetime --- database/music_database.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/database/music_database.py b/database/music_database.py index fe6cbb2f..23444547 100644 --- a/database/music_database.py +++ b/database/music_database.py @@ -15,6 +15,9 @@ from utils.logging_config import get_logger logger = get_logger("music_database") +_database_initialized_paths = set() +_database_initialization_lock = threading.Lock() + # Import matching engine for enhanced similarity logic try: from core.matching_engine import MusicMatchingEngine @@ -168,8 +171,19 @@ class MusicDatabase: self.database_path = Path(database_path) self.database_path.parent.mkdir(parents=True, exist_ok=True) - # Initialize database - self._initialize_database() + # Initialize database once per process for this path + self._initialize_database_once() + + def _initialize_database_once(self): + """Run schema setup and migrations once per database path per process.""" + db_key = str(self.database_path.resolve()) + + with _database_initialization_lock: + if db_key in _database_initialized_paths: + return + + self._initialize_database() + _database_initialized_paths.add(db_key) def _get_connection(self) -> sqlite3.Connection: """Get a NEW database connection for each operation (thread-safe)""" @@ -10796,4 +10810,4 @@ def close_database(): except Exception as e: # Ignore threading errors during shutdown pass - _database_instances.clear() \ No newline at end of file + _database_instances.clear()