diff options
authorJoshua Watt <JPEWhacker@gmail.com>2020-07-31 09:00:43 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-07-31 21:58:53 +0100
commit7b4b22bd6ca60fb23393ce088347ffe33a601c1d (patch)
parent8efb082863ff0ceec7b7e46f9a44750e12f48039 (diff)
db: Use WAL mode for on-disk database
If the in-memory database is not being used, enable WAL mode on the database to ensure that the database is resilient to pseudo shutting down unexpectedly (or being terminated by the OS). This allows projects to make the reliability vs. performance tradeoff: If they want performance they can use the in-memory database; if they want resilience they can disable the in-memory database and WAL will prevent database corruption. Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
1 files changed, 14 insertions, 1 deletions
diff --git a/pseudo_db.c b/pseudo_db.c
index 92e4f50..ebf6e08 100644
--- a/pseudo_db.c
+++ b/pseudo_db.c
@@ -158,11 +158,24 @@ static struct sql_index {
static char *file_pragmas[] = {
"PRAGMA legacy_file_format = OFF;",
- "PRAGMA journal_mode = OFF;",
/* the default page size produces painfully bad behavior
* for memory databases with some versions of sqlite.
"PRAGMA page_size = 8192;",
+ "PRAGMA journal_mode = OFF;",
+ /* Use WAL mode when using the on-disk database. If user care about
+ * performance, they can use the in-memory database, but if they care
+ * more about resilience, they can disable it and WAL mode will prevent
+ * corruption of the on-disk database (for a slight performance
+ * penalty). Note that the database still keeps synchronous to OFF,
+ * meaning its resilient to the pseudo process crashing or being killed
+ * unexpectedly, but not to the OS crashing and losing buffered disk
+ * state
+ */
+ "PRAGMA journal_mode = WAL;",
"PRAGMA locking_mode = EXCLUSIVE;",
/* Setting this to NORMAL makes pseudo noticably slower
* than fakeroot, but is perhaps more secure. However,