bench-scenarios/examples/retention_probe.rs
//! Local probe for the retention/GC planner head-to-head arm: run holger's
//! grouped `plan_retention` against the naive O(n²) full-scan baseline over a
//! synthetic record corpus, printing the same numbers the
//! `holger.retention_planner` bench arm records. Fast dev-box readout (Loki
//! produces the authoritative heavy sweep).
//!
//! Run: `cargo run -p holger-bench-scenarios --example retention_probe --features retention-planner --release`
//! env: `HOLGER_BENCH_SCALE` = quick|full|huge (heavy sweep = full/huge).
use holger_bench_scenarios::{retention, Scale};
fn main() -> anyhow::Result<()> {
let scale = Scale::from_env();
eprintln!("[probe] planning retention over the synthetic corpus …");
let o = retention::retention_planner_throughput(&scale)?;
println!(
"holger.retention_planner (records {}, names {}, holger_iters {}, naive_iters {})",
o.records, o.names, o.holger_iters, o.naive_iters
);
println!(" delete_count (both agree) : {}", o.delete_count);
println!(
" holger_records_per_sec : {:.0}",
o.holger.records_per_sec
);
println!(
" naive_records_per_sec : {:.0}",
o.naive.records_per_sec
);
println!(
" speedup (holger / naive) : {:.1}x",
o.holger.records_per_sec / o.naive.records_per_sec.max(f64::MIN_POSITIVE)
);
println!(
" holger_plans_per_sec : {:.1}",
o.holger.plans_per_sec
);
println!(
" naive_plans_per_sec : {:.1}",
o.naive.plans_per_sec
);
println!(
" holger_mean_ms : {:.3}",
o.holger.mean_ms
);
println!(" naive_mean_ms : {:.3}", o.naive.mean_ms);
println!(
" holger_p50_ms / p99_ms : {:.3} / {:.3}",
o.holger.p50_ms, o.holger.p99_ms
);
println!(
" naive_p50_ms / p99_ms : {:.3} / {:.3}",
o.naive.p50_ms, o.naive.p99_ms
);
println!(
" holger_metadata_mbs : {:.1}",
o.holger.metadata_mbs
);
println!(
" naive_metadata_mbs : {:.1}",
o.naive.metadata_mbs
);
println!(" -- holger-only large run --");
println!(" large_records : {}", o.large_records);
println!(
" large_delete_count : {}",
o.large_delete_count
);
println!(
" holger_large_records_per_sec : {:.0}",
o.large_records_per_sec
);
println!(
" holger_large_plans_per_sec : {:.1}",
o.large_plans_per_sec
);
println!(" holger_large_mean_ms : {:.3}", o.large_mean_ms);
Ok(())
}