mirror of
https://github.com/chatmail/core.git
synced 2026-05-07 08:56:30 +03:00
feat(sql): truncate WAL on stop_io()
This commit is contained in:
@@ -423,6 +423,9 @@ impl Context {
|
|||||||
/// Stops the IO scheduler.
|
/// Stops the IO scheduler.
|
||||||
pub async fn stop_io(&self) {
|
pub async fn stop_io(&self) {
|
||||||
self.scheduler.stop(self).await;
|
self.scheduler.stop(self).await;
|
||||||
|
if let Err(err) = self.sql.checkpoint(self).await {
|
||||||
|
error!(self, "Failed to checkpoint the database: {err:#}.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Restarts the IO scheduler if it was running before
|
/// Restarts the IO scheduler if it was running before
|
||||||
|
|||||||
17
src/sql.rs
17
src/sql.rs
@@ -131,6 +131,23 @@ impl Sql {
|
|||||||
// drop closes the connection
|
// drop closes the connection
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Flushes the WAL file.
|
||||||
|
pub(crate) async fn checkpoint(&self, context: &Context) -> Result<()> {
|
||||||
|
let busy = self
|
||||||
|
.call_write(move |conn| {
|
||||||
|
let busy = conn.query_row("PRAGMA wal_checkpoint(TRUNCATE)", (), |row| {
|
||||||
|
let busy: bool = row.get(0)?;
|
||||||
|
Ok(busy)
|
||||||
|
})?;
|
||||||
|
Ok(busy)
|
||||||
|
})
|
||||||
|
.await?;
|
||||||
|
if busy {
|
||||||
|
warn!(context, "Failed to checkpoint WAL");
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Imports the database from a separate file with the given passphrase.
|
/// Imports the database from a separate file with the given passphrase.
|
||||||
pub(crate) async fn import(&self, path: &Path, passphrase: String) -> Result<()> {
|
pub(crate) async fn import(&self, path: &Path, passphrase: String) -> Result<()> {
|
||||||
let path_str = path
|
let path_str = path
|
||||||
|
|||||||
Reference in New Issue
Block a user