Merge pull request #1 from mprasil/concurrency_fix

WAL journal mode and delete retry added
pull/107/head
Shane A. Faulkner 6 years ago committed by GitHub
commit 01875c395b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -64,14 +64,33 @@ impl Attachment {
pub fn delete(self, conn: &DbConn) -> QueryResult<()> { pub fn delete(self, conn: &DbConn) -> QueryResult<()> {
use util; use util;
use std::{thread, time};
util::delete_file(&self.get_file_path()); let mut retries = 10;
loop {
match diesel::delete(
attachments::table.filter(
attachments::id.eq(&self.id)
)
).execute(&**conn) {
Ok(_) => break,
Err(err) => {
if retries < 1 {
println!("ERROR: Failed with 10 retries");
return Err(err)
} else {
retries = retries - 1;
println!("Had to retry! Retries left: {}", retries);
thread::sleep(time::Duration::from_millis(500));
continue
}
}
}
}
diesel::delete( util::delete_file(&self.get_file_path());
attachments::table.filter( Ok(())
attachments::id.eq(self.id)
)
).execute(&**conn).and(Ok(()))
} }
pub fn delete_all_by_cipher(cipher_uuid: &str, conn: &DbConn) -> QueryResult<()> { pub fn delete_all_by_cipher(cipher_uuid: &str, conn: &DbConn) -> QueryResult<()> {

@ -83,6 +83,11 @@ fn check_db() {
exit(1); exit(1);
} }
} }
// Turn on WAL in SQLite
use diesel::RunQueryDsl;
let connection = db::get_connection().expect("Can't conect to DB");
diesel::sql_query("PRAGMA journal_mode=wal").execute(&connection).expect("Failed to turn on WAL");
} }
fn check_rsa_keys() { fn check_rsa_keys() {

Loading…
Cancel
Save