From b2e7b6fafb31082430494839ba502ebaef9ef9b1 Mon Sep 17 00:00:00 2001 From: Tanmoy Sarkar <57363826+tanmoysrt@users.noreply.github.com> Date: Sat, 25 Oct 2025 19:12:25 +0530 Subject: [PATCH 1/2] fix(sqlite): Use DEFERRED isolation level sqlite connection starts with no transaction if isolation level hasn't provided --- frappe/database/sqlite/database.py | 1 - 1 file changed, 1 deletion(-) diff --git a/frappe/database/sqlite/database.py b/frappe/database/sqlite/database.py index 2bb21c9a76..6e02173239 100644 --- a/frappe/database/sqlite/database.py +++ b/frappe/database/sqlite/database.py @@ -105,7 +105,6 @@ class SQLiteDatabase(SQLiteExceptionUtil, Database): def get_connection(self, read_only: bool = False): conn = self.create_connection(read_only) - conn.isolation_level = None conn.create_function("regexp", 2, regexp) conn.create_function("regexp_replace", 3, regexp_replace) pragmas = { From 5ce54d0144bade7d9e3f3e5ac999f63e6fa7b1e2 Mon Sep 17 00:00:00 2001 From: Tanmoy Sarkar <57363826+tanmoysrt@users.noreply.github.com> Date: Sat, 25 Oct 2025 21:28:08 +0530 Subject: [PATCH 2/2] feat(sqlite): Set 5s of busy_timeout To reduce database lock issue during concurrent write / wal merge --- frappe/database/sqlite/database.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/database/sqlite/database.py b/frappe/database/sqlite/database.py index 6e02173239..7ec508d7d5 100644 --- a/frappe/database/sqlite/database.py +++ b/frappe/database/sqlite/database.py @@ -110,6 +110,7 @@ class SQLiteDatabase(SQLiteExceptionUtil, Database): pragmas = { "journal_mode": "WAL", "synchronous": "NORMAL", + "busy_timeout": 5000, # in milliseconds } cursor = conn.cursor() for pragma, value in pragmas.items():