Hi,

we are testing the use of dbmail+sqlite for mail storage in a clustered 
environment.
When there are concurrent writes e.g. on the same dbmail-imapd mailbox, then 
most processes die because sqlite returns a SQLITE_BUSY error to them. This is 
a documented behaviour of sqlite.

This issue can easily be resolved by setting a busy_handler:


diff -urN dbmail-2.1.7-orig/modules/dbsqlite.c dbmail-2.1.7/modules/dbsqlite.c
--- dbmail-2.1.7-orig/modules/dbsqlite.c        2006-07-15 19:32:28.000000000 
+0200
+++ dbmail-2.1.7/modules/dbsqlite.c     2006-10-13 11:18:58.000000000 +0200
@@ -258,6 +258,7 @@
               trace(TRACE_FATAL, "%s,%s: sqlite3_create_function failed", 
__FILE__,__func__);
               return -1;
       }
+       sqlite3_busy_timeout(conn, 60000);
       return 0;
}


This would set a timeout busy-handler of 60 seconds for sqlite, so concurrent 
writes will hang sometimes, but not fail.


Best Regards
Jens Wagner
-- heXoNet Support GmbH Talstrasse 27 66424 Homburg Germany Phone: +49 6841 1871036-0 Fax: +49 6841 1871036-9

Reply via email to