aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreta <eta@theta.eu.org>2020-10-04 13:54:11 +0100
committerMarvin W <git@larma.de>2020-10-06 18:05:25 +0200
commit9cc3382abe801f0be96b79dcfc9cd4ac0272befa (patch)
tree8b2c362e94f49f023216aae0fb8f5b122d51d9ab
parent7b58c1596aa13a7ef0dd7897e25f9a80c5929a07 (diff)
downloaddino-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.vala9
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) {