Skip to content

OpenRaft v0.10.0-alpha.33

Latest

Choose a tag to compare

@drmingdrmer drmingdrmer released this 05 Aug 10:12
· 98 commits to main since this release

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() returns ReadLogId.
  • Raft::get_read_log_id() returns (ReadLogId, Option<LogId>).
  • Linearizer::new() accepts ReadLogId.

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 SnapshotMeta using only last_log_id and last_membership.
  • RaftNetworkV2 implementations require no changes.
  • Chunked v1 implementations use openraft_legacy::network_v1::SnapshotMeta, which retains snapshot_id and 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-unit with parse-size, removing the vulnerable lockfile-only rkyv dependency.
  • Disable unused tabled default features.
  • Move the experimental ezraft implementation out of the OpenRaft repository.

Full changelog: v0.10.0-alpha.32...v0.10.0-alpha.33