dag-executor 0.1.0

A production-ready DAG executor with state management and advanced patterns
Documentation
//! Benchmark: file-storage save/load latency with checksums.

use std::sync::Arc;

use criterion::{criterion_group, criterion_main, Criterion};
use dag_executor::storage::{Durability, FileStorage, Storage};
use tokio::runtime::Runtime;

fn bench_persistence(c: &mut Criterion) {
    let rt = Runtime::new().unwrap();

    // ~1KB payload, matching the "state persistence: <1ms for 1KB" target.
    let payload = serde_json::json!({ "data": "x".repeat(1024) });

    let mut group = c.benchmark_group("state_persistence");

    // Compare all three durability modes for a 1KB write.
    for (name, mode) in [
        ("save_1kb_fast", Durability::Fast),
        ("save_1kb_atomic", Durability::Atomic),
        ("save_1kb_durable", Durability::Durable),
    ] {
        let dir = tempfile::tempdir().unwrap();
        let storage = Arc::new(FileStorage::open_with(dir.path(), mode).unwrap());
        group.bench_function(name, |b| {
            b.iter(|| {
                rt.block_on(storage.save("bench-key", &payload)).unwrap();
            });
        });
    }

    let dir = tempfile::tempdir().unwrap();
    let storage = Arc::new(FileStorage::open(dir.path()).unwrap());
    group.bench_function("load_1kb", |b| {
        rt.block_on(storage.save("bench-key", &payload)).unwrap();
        b.iter(|| {
            rt.block_on(storage.load("bench-key")).unwrap();
        });
    });
    group.finish();
}

criterion_group!(benches, bench_persistence);
criterion_main!(benches);