Add Checkpointing
Checkpointing persists graph state between supersteps, enabling pause/resume and state inspection.
In-memory checkpointing
For development and testing:
use synwire_checkpoint::memory::InMemoryCheckpointSaver;
let saver = InMemoryCheckpointSaver::new();
SQLite checkpointing
For persistent storage:
use synwire_checkpoint_sqlite::saver::SqliteSaver;
let saver = SqliteSaver::new("checkpoints.db")?;
BaseCheckpointSaver trait
All checkpoint implementations satisfy BaseCheckpointSaver:
use synwire_checkpoint::base::BaseCheckpointSaver;
async fn save_state(
saver: &dyn BaseCheckpointSaver,
thread_id: &str,
state: serde_json::Value,
) -> Result<(), Box<dyn std::error::Error>> {
// Save checkpoint...
Ok(())
}
Key-value store
For arbitrary key-value storage alongside checkpoints, use BaseStore:
use synwire_checkpoint::store::base::BaseStore;
Custom checkpoint backend
Implement BaseCheckpointSaver for your own storage backend. Use the conformance test suite to validate:
use synwire_checkpoint_conformance::run_conformance_tests;
// In a test:
run_conformance_tests(|| your_saver_factory()).await;
See also
- Checkpointing Tutorial — hands-on: in-memory → SQLite → fork
- Checkpointing Explanation —
BaseStore, serde protocol, and trade-offs - Pregel Execution Model — how checkpoints relate to supersteps