use tracing::info;
use super::core::WalManager;
use crate::types::Lsn;
impl WalManager {
pub fn truncate_before(
&self,
checkpoint_lsn: Lsn,
) -> crate::Result<nodedb_wal::segment::TruncateResult> {
let wal = self.wal.lock().unwrap_or_else(|p| p.into_inner());
let result = wal
.truncate_before(checkpoint_lsn.as_u64())
.map_err(crate::Error::Wal)?;
if result.segments_deleted > 0 {
info!(
checkpoint_lsn = checkpoint_lsn.as_u64(),
segments_deleted = result.segments_deleted,
bytes_reclaimed = result.bytes_reclaimed,
"WAL truncated"
);
}
Ok(result)
}
pub fn sync(&self) -> crate::Result<()> {
let mut wal = self.wal.lock().unwrap_or_else(|p| p.into_inner());
wal.sync().map_err(crate::Error::Wal)
}
pub fn next_lsn(&self) -> Lsn {
let wal = self.wal.lock().unwrap_or_else(|p| p.into_inner());
Lsn::new(wal.next_lsn())
}
pub fn total_size_bytes(&self) -> crate::Result<u64> {
let wal = self.wal.lock().unwrap_or_else(|p| p.into_inner());
wal.total_size_bytes().map_err(crate::Error::Wal)
}
pub fn list_segments(&self) -> crate::Result<Vec<nodedb_wal::segment::SegmentMeta>> {
let wal = self.wal.lock().unwrap_or_else(|p| p.into_inner());
wal.list_segments().map_err(crate::Error::Wal)
}
}