use macrame::metrics::CommandKind;
use macrame::prelude::*;
const TS: &str = "2026-01-01T00:00:00.000000Z";
const OPEN: &str = "9999-12-31T23:59:59.999999Z";
fn edges_from(lo: usize, hi: usize) -> Vec<EdgeAssertion> {
let hub = hi / 4;
let mut out = Vec::new();
for i in lo.max(1)..=hub.min(hi) {
out.push(
EdgeAssertion::new("c000000", format!("c{i:06}"), "LINKS")
.valid_from(TS)
.valid_to(OPEN),
);
}
for i in lo.max(hub + 1)..hi {
out.push(
EdgeAssertion::new(format!("c{i:06}"), format!("c{:06}", i + 1), "LINKS")
.valid_from(TS)
.valid_to(OPEN),
);
}
out
}
async fn stat1(path: &std::path::Path) -> String {
let db = libsql::Builder::new_local(path).build().await.unwrap();
let conn = db.connect().unwrap();
let mut rows = match conn
.query(
"SELECT tbl, idx, stat FROM sqlite_stat1 ORDER BY tbl, idx",
(),
)
.await
{
Ok(r) => r,
Err(_) => return String::from("<no sqlite_stat1>"),
};
let mut out = Vec::new();
while let Some(r) = rows.next().await.unwrap() {
out.push(format!(
"{}/{}={}",
r.get::<String>(0).unwrap_or_default(),
r.get::<String>(1).unwrap_or_default(),
r.get::<String>(2).unwrap_or_default()
));
}
out.join(" ")
}
fn stats(db: &Database, kind: CommandKind) -> (u64, u64, std::time::Duration) {
let snap = db.metrics();
snap.kinds
.iter()
.find(|k| k.kind == kind)
.map(|k| (k.turns, k.over_budget, k.longest))
.unwrap_or((0, 0, std::time::Duration::ZERO))
}
async fn one_optimize(db: &Database, label: &str) {
let (turns_before, _, _) = stats(db, CommandKind::Optimize);
let t = std::time::Instant::now();
db.optimize().await.unwrap();
let wall = t.elapsed();
let (turns_after, over, longest) = stats(db, CommandKind::Optimize);
assert_eq!(
turns_after,
turns_before + 1,
"the Optimize counter moved {turns_before} -> {turns_after}: something \
else ran one, so `longest` is not this hold"
);
println!(" {label:<22} wall={wall:<12?} longest_hold={longest:<12?} over_budget={over}");
}
#[tokio::main]
async fn main() {
let dir = std::env::temp_dir().join(format!("macrame_optimize_hold_{}", std::process::id()));
std::fs::create_dir_all(&dir).unwrap();
let path = dir.join("optimize.db");
let half = 20_000usize;
let full = 40_000usize;
let db = Database::open_with_cadence(&path, None).await.unwrap();
let concepts: Vec<_> = (0..=full)
.map(|i| ConceptUpsert::new(format!("c{i:06}"), format!("C{i}")).valid_from(TS))
.collect();
db.write_concepts(concepts).await.unwrap();
db.bulk_import(edges_from(1, half)).await.unwrap();
println!("budget = {:?}", macrame::CHUNK_BUDGET);
println!("\n===== optimize(), by how far the statistics have drifted =====");
one_optimize(&db, "cold (never analysed)").await;
one_optimize(&db, "idle (nothing moved)").await;
db.bulk_import(edges_from(half, half + 200)).await.unwrap();
one_optimize(&db, "after a small write").await;
db.bulk_import(edges_from(half + 200, full)).await.unwrap();
one_optimize(&db, "after doubling").await;
one_optimize(&db, "idle again").await;
println!(
"
===== does optimize() actually rewrite the statistics? ====="
);
let mut grown = full;
for factor in [2usize, 5, 25] {
let target = full * factor;
let before = stat1(&path).await;
db.write_concepts(
(grown..=target)
.map(|i| ConceptUpsert::new(format!("c{i:06}"), format!("C{i}")).valid_from(TS))
.collect::<Vec<_>>(),
)
.await
.unwrap();
db.bulk_import(edges_from(grown, target)).await.unwrap();
grown = target;
let (t0, _, _) = stats(&db, CommandKind::Optimize);
db.optimize().await.unwrap();
let (t1, _, longest) = stats(&db, CommandKind::Optimize);
assert_eq!(t1, t0 + 1, "somebody else ran an optimize");
let after = stat1(&path).await;
println!(
" {factor:>2}x the original ledger: stat1 {} (longest hold now {longest:?})",
if after == before {
"UNCHANGED -- optimize() declined"
} else {
"rewritten"
}
);
}
println!("\n===== analyze(), same ledger, for scale =====");
let (t_before, _, _) = stats(&db, CommandKind::Analyze);
db.analyze().await.unwrap();
let (t_after, over, longest) = stats(&db, CommandKind::Analyze);
assert_eq!((t_before, t_after), (0, 1), "somebody else ran ANALYZE");
println!(" analyze() longest_hold={longest:<12?} over_budget={over}");
println!("\n===== what budget_violations() says now =====");
for k in db.metrics().budget_violations() {
println!(
" {:<10} turns={:<4} over={:<4} longest={:?}",
k.kind.as_str(),
k.turns,
k.over_budget,
k.longest
);
}
let (closing_turns, _, _) = stats(&db, CommandKind::Optimize);
db.close().await.unwrap();
println!("\noptimize() turns before close(): {closing_turns}");
let _ = std::fs::remove_dir_all(&dir);
}