use wal_db::Wal;
fn main() -> Result<(), wal_db::WalError> {
let dir = tempfile::tempdir().map_err(wal_db::WalError::from)?;
let path = dir.path().join("checkpoint.wal");
let wal = Wal::open(&path)?;
let _ = wal.append(b"set x = 1")?;
let checkpoint = wal.append(b"set y = 2")?; let _ = wal.append(b"set z = 3")?;
let _ = wal.append(b"set w = 4")?;
wal.sync()?;
println!("records after the checkpoint (lsn {checkpoint}):");
for entry in wal.iter_from(checkpoint)? {
let entry = entry?;
if entry.lsn() > checkpoint {
println!(
" lsn {}: {}",
entry.lsn(),
String::from_utf8_lossy(entry.data())
);
}
}
wal.truncate_after(checkpoint)?;
drop(wal);
let reopened = Wal::open(&path)?;
println!("after truncating back to the checkpoint, the log holds:");
for entry in reopened.iter()? {
let entry = entry?;
println!(
" lsn {}: {}",
entry.lsn(),
String::from_utf8_lossy(entry.data())
);
}
Ok(())
}