|
|
|
@ -32,7 +32,7 @@ use rocket::{ |
|
|
|
}; |
|
|
|
}; |
|
|
|
use tokio::{ |
|
|
|
use tokio::{ |
|
|
|
sync::RwLock, |
|
|
|
sync::RwLock, |
|
|
|
time::{interval, Interval}, |
|
|
|
time::{interval, timeout}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
use tracing::span; |
|
|
|
use tracing::span; |
|
|
|
use tracing_subscriber::{prelude::*, Registry}; |
|
|
|
use tracing_subscriber::{prelude::*, Registry}; |
|
|
|
@ -211,18 +211,25 @@ async fn main() { |
|
|
|
tokio::spawn(async { |
|
|
|
tokio::spawn(async { |
|
|
|
let weak = weak; |
|
|
|
let weak = weak; |
|
|
|
|
|
|
|
|
|
|
|
let mut i = interval(Duration::from_secs(10)); |
|
|
|
let mut i = interval(Duration::from_secs(60)); |
|
|
|
|
|
|
|
|
|
|
|
loop { |
|
|
|
loop { |
|
|
|
i.tick().await; |
|
|
|
i.tick().await; |
|
|
|
|
|
|
|
|
|
|
|
if let Some(arc) = Weak::upgrade(&weak) { |
|
|
|
if let Some(arc) = Weak::upgrade(&weak) { |
|
|
|
log::warn!("wal-trunc: locking..."); |
|
|
|
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..."); |
|
|
|
log::warn!("wal-trunc: locked, flushing..."); |
|
|
|
let start = Instant::now(); |
|
|
|
let start = Instant::now(); |
|
|
|
guard.flush_wal(); |
|
|
|
guard.flush_wal(); |
|
|
|
log::warn!("wal-trunc: locked, flushed in {:?}", start.elapsed()); |
|
|
|
log::warn!("wal-trunc: flushed in {:?}", start.elapsed()); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|