From f80c99a43fb54d0c285968c0c16c249d3bbb0d50 Mon Sep 17 00:00:00 2001 From: Scott Lamb Date: Wed, 10 Jul 2019 01:09:52 -0700 Subject: [PATCH] set sqlite3 options for full durability --- db/db.rs | 4 ++++ db/upgrade/mod.rs | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/db/db.rs b/db/db.rs index 24a3e6e..9f197d8 100644 --- a/db/db.rs +++ b/db/db.rs @@ -1791,6 +1791,8 @@ impl LockedDatabase { /// test code. pub fn init(conn: &mut rusqlite::Connection) -> Result<(), Error> { conn.execute("pragma foreign_keys = on", &[] as &[&ToSql])?; + conn.execute("pragma fullfsync = on", &[] as &[&ToSql])?; + conn.execute("pragma synchronous = 2", &[] as &[&ToSql])?; let tx = conn.transaction()?; tx.execute_batch(include_str!("schema.sql"))?; { @@ -1852,6 +1854,8 @@ impl Database { pub fn new(clocks: C, conn: rusqlite::Connection, read_write: bool) -> Result, Error> { conn.execute("pragma foreign_keys = on", &[] as &[&ToSql])?; + conn.execute("pragma fullfsync = on", &[] as &[&ToSql])?; + conn.execute("pragma synchronous = 2", &[] as &[&ToSql])?; { let ver = get_schema_version(&conn)?.ok_or_else(|| format_err!( "no such table: version. \ diff --git a/db/upgrade/mod.rs b/db/upgrade/mod.rs index dc820a0..2da3aac 100644 --- a/db/upgrade/mod.rs +++ b/db/upgrade/mod.rs @@ -97,6 +97,10 @@ pub fn run(args: &Args, conn: &mut rusqlite::Connection) -> Result<(), Error> { // be careful about the order of operations during the upgrade. conn.execute("pragma foreign_keys = on", &[] as &[&ToSql])?; + // Make the database actually durable. + conn.execute("pragma fullfsync = on", &[] as &[&ToSql])?; + conn.execute("pragma synchronous = 2", &[] as &[&ToSql])?; + // WAL is the preferred journal mode for normal operation; it reduces the number of syncs // without compromising safety. set_journal_mode(&conn, "wal").unwrap();