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