use std::sync::Arc;
fn main() -> fsys::Result<()> {
let path = std::env::temp_dir().join("fsys_example_append_batch.wal");
let _ = std::fs::remove_file(&path);
let fs = Arc::new(fsys::builder().build()?);
let log = fs.journal(&path)?;
let records: Vec<Vec<u8>> = (0..64)
.map(|i| format!("txn 42: insert row {i:03} (key=v{i:03})").into_bytes())
.collect();
let refs: Vec<&[u8]> = records.iter().map(Vec::as_slice).collect();
let lsn = log.append_batch(&refs)?;
println!("submitted 64 records in one syscall, end LSN = {lsn}");
log.sync_through(lsn)?;
println!("durable through LSN {}", log.synced_lsn());
log.close()?;
let mut reader = fsys::JournalReader::open(&path)?;
let mut count = 0;
for record in reader.iter() {
let rec = record?;
count += 1;
if rec.payload == b"txn 42: insert row 000 (key=v000)" {
println!("read back first record: {} bytes", rec.payload.len());
}
}
assert_eq!(count, 64, "all 64 records must be present");
println!(
"replay confirmed: {count} records, tail state {:?}",
reader.tail_state()
);
let _ = std::fs::remove_file(&path);
Ok(())
}