From 49d2c271ca2b94d1af7cf4855c696646f9bfd2e1 Mon Sep 17 00:00:00 2001 From: YueGuobin Date: Mon, 15 Jun 2026 13:02:17 +0800 Subject: [PATCH] Enable SQLite WAL mode to fix 'database is locked' errors under concurrent API requests --- gns3server/db/tasks.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gns3server/db/tasks.py b/gns3server/db/tasks.py index 887ff9bf1..b236be9da 100644 --- a/gns3server/db/tasks.py +++ b/gns3server/db/tasks.py @@ -149,9 +149,12 @@ async def disconnect_from_db(app: FastAPI) -> None: @event.listens_for(Engine, "connect") def set_sqlite_pragma(dbapi_connection, connection_record): + # Enable WAL mode for SQLite to allow concurrent reads and writes. + # Without WAL, concurrent API requests can cause "database is locked" errors. + cursor = dbapi_connection.cursor() + cursor.execute("PRAGMA journal_mode=WAL") # Enable SQL foreign key support for SQLite # https://docs.sqlalchemy.org/en/14/dialects/sqlite.html#foreign-key-support - cursor = dbapi_connection.cursor() cursor.execute("PRAGMA foreign_keys=ON") cursor.close()