diff --git a/src/client_server/sync.rs b/src/client_server/sync.rs index 6df8af84..ddc48702 100644 --- a/src/client_server/sync.rs +++ b/src/client_server/sync.rs @@ -144,6 +144,8 @@ pub async fn sync_helper_wrapper( } } + drop(db); + let _ = tx.send(Some(r.map(|(r, _)| r.into()))); } diff --git a/src/main.rs b/src/main.rs index 826f182e..44444d61 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,7 +32,7 @@ use rocket::{ }; use tokio::{ sync::RwLock, - time::{interval, Interval}, + time::{interval, timeout}, }; use tracing::span; use tracing_subscriber::{prelude::*, Registry}; @@ -211,18 +211,25 @@ async fn main() { tokio::spawn(async { let weak = weak; - let mut i = interval(Duration::from_secs(10)); + let mut i = interval(Duration::from_secs(60)); loop { i.tick().await; if let Some(arc) = Weak::upgrade(&weak) { log::warn!("wal-trunc: locking..."); - let guard = arc.write().await; + let guard = { + if let Ok(guard) = timeout(Duration::from_secs(5), arc.write()).await { + guard + } else { + log::warn!("wal-trunc: lock failed in timeout, canceled."); + continue; + } + }; log::warn!("wal-trunc: locked, flushing..."); let start = Instant::now(); guard.flush_wal(); - log::warn!("wal-trunc: locked, flushed in {:?}", start.elapsed()); + log::warn!("wal-trunc: flushed in {:?}", start.elapsed()); } else { break; }