fix: do not block writers for more than 1 second during checkpoints

This commit is contained in:
Greg Heartsfield 2022-12-22 16:10:49 -06:00
parent b80b54cd9d
commit 25480e837f

View File

@ -689,8 +689,10 @@ pub async fn db_maintenance(pool: SqlitePool) {
tokio::select! { tokio::select! {
_ = tokio::time::sleep(Duration::from_secs(EVENT_MAINTENANCE_FREQ_SEC)) => { _ = tokio::time::sleep(Duration::from_secs(EVENT_MAINTENANCE_FREQ_SEC)) => {
if let Ok(mut conn) = pool.get() { if let Ok(mut conn) = pool.get() {
// set the busy timeout to a larger value (default is 5 seconds). // the busy timer will block writers, so don't set
conn.busy_timeout(Duration::from_secs(60)).ok(); // this any higher than you want max latency for event
// writes.
conn.busy_timeout(Duration::from_secs(1)).ok();
debug!("running database optimizer"); debug!("running database optimizer");
optimize_db(&mut conn).ok(); optimize_db(&mut conn).ok();
debug!("running wal_checkpoint(TRUNCATE)"); debug!("running wal_checkpoint(TRUNCATE)");