diff options
author | eta <eta@theta.eu.org> | 2020-10-04 13:54:11 +0100 |
---|---|---|
committer | Marvin W <git@larma.de> | 2020-10-06 18:05:25 +0200 |
commit | 9cc3382abe801f0be96b79dcfc9cd4ac0272befa (patch) | |
tree | 8b2c362e94f49f023216aae0fb8f5b122d51d9ab | |
parent | 7b58c1596aa13a7ef0dd7897e25f9a80c5929a07 (diff) | |
download | dino-9cc3382abe801f0be96b79dcfc9cd4ac0272befa.tar.gz dino-9cc3382abe801f0be96b79dcfc9cd4ac0272befa.zip |
service/database: use WAL mode + safe PRAGMA synchronous setting
Setting PRAGMA synchronous = 0 is really unsafe, and leads to database
corruption (which I've personally experienced). This commit uses
SQLite's Write-Ahead Log (WAL) [1] instead, together with synchronous =
NORMAL. According to [1], this trades off performance for durability
(i.e. it's possible that some transactions may not have committed if the
power gets lost), but still guarantees that the database won't corrupt
itself.
Together, these changes should improve reliability whilst either
improving or having no effect on performance.
[1]: https://www.sqlite.org/wal.html
-rw-r--r-- | libdino/src/service/database.vala | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/libdino/src/service/database.vala b/libdino/src/service/database.vala index d3bc71c2..e6c03bf6 100644 --- a/libdino/src/service/database.vala +++ b/libdino/src/service/database.vala @@ -293,12 +293,9 @@ public class Database : Qlite.Database { mam_catchup = new MamCatchupTable(this); settings = new SettingsTable(this); init({ account, jid, entity, content_item, message, message_correction, real_jid, file_transfer, conversation, avatar, entity_identity, entity_feature, roster, mam_catchup, settings }); - try { - exec("PRAGMA synchronous=0"); - } catch (Error e) { } - try { - exec("PRAGMA secure_delete=1"); - } catch (Error e) { } + exec("PRAGMA journal_mode = WAL"); + exec("PRAGMA synchronous = NORMAL"); + exec("PRAGMA secure_delete = ON"); } public override void migrate(long oldVersion) { |