From 31cf4d1a901ef16f21829630c8593917a1510a7c Mon Sep 17 00:00:00 2001 From: Edu4rdSHL Date: Fri, 16 Apr 2021 11:28:32 -0500 Subject: [PATCH] Avoid sqlite database aggressive locking. - https://sqlite.org/wal.html --- src/controller.rs | 5 +++++ src/database.rs | 1 + 2 files changed, 6 insertions(+) diff --git a/src/controller.rs b/src/controller.rs index f3467d7..3045282 100644 --- a/src/controller.rs +++ b/src/controller.rs @@ -7,6 +7,7 @@ use { pub fn manage_creation(args: &mut Args) -> Result<()> { let connection = sqlite::open(&args.database_file)?; + connection.execute("PRAGMA journal_mode=WAL")?; args.snapshot_name = format!( "{}-{}", args.snapshot_prefix, @@ -23,6 +24,7 @@ pub fn manage_creation(args: &mut Args) -> Result<()> { pub fn manage_deletion(args: &mut Args) -> Result<()> { let connection = sqlite::open(&args.database_file)?; + connection.execute("PRAGMA journal_mode=WAL")?; let snapshot_data = database::return_snapshot_data(&connection, args)?; if !snapshot_data.snap_id.is_empty() { args.snapshot_name = snapshot_data.destination + &snapshot_data.name; @@ -42,6 +44,7 @@ pub fn manage_deletion(args: &mut Args) -> Result<()> { pub fn manage_restoring(args: &mut Args) -> Result<()> { let connection = sqlite::open(&args.database_file)?; + connection.execute("PRAGMA journal_mode=WAL")?; let snapshot_data = database::return_snapshot_data(&connection, args)?; if !snapshot_data.snap_id.is_empty() { args.snapshot_name = snapshot_data.destination + &snapshot_data.name; @@ -67,6 +70,7 @@ pub fn manage_restoring(args: &mut Args) -> Result<()> { pub fn manage_listing(args: &mut Args) -> Result<()> { let connection = sqlite::open(&args.database_file)?; + connection.execute("PRAGMA journal_mode=WAL")?; let snaps_data = database::return_all_data(&connection)?; let mut table = Table::new(); @@ -95,6 +99,7 @@ pub fn manage_listing(args: &mut Args) -> Result<()> { pub fn keep_only_x(args: &mut Args) -> Result<()> { let connection = sqlite::open(&args.database_file)?; + connection.execute("PRAGMA journal_mode=WAL")?; let snaps_data = database::return_only_x_items(&connection, args)?; for data in &snaps_data { args.snapshot_name = data.destination.clone() + &data.name; diff --git a/src/database.rs b/src/database.rs index 06a96bb..06cdac1 100644 --- a/src/database.rs +++ b/src/database.rs @@ -8,6 +8,7 @@ use { pub fn test_database(connection_str: &str) -> Result<()> { let connection = sqlite::open(&connection_str)?; + connection.execute("PRAGMA journal_mode=WAL")?; drop(connection); Ok(())