OpenRaft v0.10.0-alpha.33
This alpha introduces breaking updates to linearizable reads and snapshot metadata, alongside snapshot-safety fixes and stronger Jepsen coverage.
Breaking changes
Leadership-aware linearizable reads
Linearizable-read APIs now return ReadLogId instead of Option<LogId>:
Raft::ensure_linearizable()returnsReadLogId.Raft::get_read_log_id()returns(ReadLogId, Option<LogId>).Linearizer::new()acceptsReadLogId.
ReadLogId is always present and identifies both the producing leadership and the inclusive log boundary the state machine must apply before serving the read.
Use ReadLogId::log_id() to access the underlying log ID, or ReadLogId::from_log_id() when reconstructing a leader-issued barrier for follower reads.
snapshot_id moved out of snapshot metadata
snapshot_id has been removed from SnapshotMeta and SnapshotSignature. It identifies a transfer session, not the state represented by a snapshot.
- State machines now construct
SnapshotMetausing onlylast_log_idandlast_membership. RaftNetworkV2implementations require no changes.- Chunked v1 implementations use
openraft_legacy::network_v1::SnapshotMeta, which retainssnapshot_idand the 0.9 wire layout. - The v1 sender now generates a fresh ID for every transfer session.
No stored-data migration is required. The serialized layouts remain compatible with OpenRaft 0.9 under both named and positional formats.
See the v0.9-to-v0.10 upgrade guide.
Correctness fixes
- Reject snapshots that conflict with an entry at an already committed index, during both installation and startup recovery.
- Fix RocksDB example snapshot ordering once log indexes cross digit boundaries.
- Prevent node-only membership changes from panicking on uninitialized nodes; they now return the normal leadership error.
Testing and reliability
- Add composable Jepsen chaos combining partitions, process termination, process pauses, and membership changes.
- Add a process-pause nemesis and configurable snapshot pressure.
- Improve target selection, recovery tracking, panic detection, random-seed recording, and incomplete-run diagnostics.
- Run Jepsen linting and unit tests on pull requests and retain result artifacts for every run.
Other changes
- Replace
byte-unitwithparse-size, removing the vulnerable lockfile-onlyrkyvdependency. - Disable unused
tableddefault features. - Move the experimental
ezraftimplementation out of the OpenRaft repository.
Full changelog: v0.10.0-alpha.32...v0.10.0-alpha.33