Changelog
View SourceAll notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[0.0.2] - Current
Critical Fixes
- Vote Attribution Bug: Fixed election vote counting - votes were incorrectly attributed to self instead of replying peer, making multi-node elections impossible to win
- Follower AppendEntries Stub: Replaced stub
handle_followerwith properRpcHandlerdelegation for term checking, log consistency verification, entry appending, and commit index advancement - Log Truncation No-Op: Implemented actual
truncate_log_fromto remove conflicting entries when leader sends entries with different terms at same index (Raft Log Matching Property) - Vote Term Ordering: Fixed election livelock risk - now checks log up-to-date BEFORE updating term/voted_for when candidate has higher term
- Write-Ahead Ordering: Fixed
Log.write/2to write to WAL before updating in-memory state, ensuring true write-ahead semantics - Segment Durability: Added
:file.sync/1calls after segment append and seal operations for crash safety
Important Fixes
- ETS Table Leak: Fixed
LogMetato delete ETS table on terminate, preventing resource leaks on restart - Election Reply Tracking: Added peer ID tracking in process dictionary for correlating election RPC replies with sender
- Snapshot Transfer: Implemented leader-side snapshot chunk sending with peer status tracking and completion handling
New Features
- Network Layer: Added
RaftEx.Networkmodule for unified local/remote RPC routing with node monitoring - Segment Files: Complete immutable segment file implementation with fsync, recovery, truncation, and deletion
- Server Process States: Full implementation of
candidateandpre_votestates with election timeout handling - Test Coverage: Added 11 new tests (96 → 107) covering segment writer, network layer, and cluster operations
Code Quality
- Added
excoveralls,dialyxir,credofor test coverage and static analysis - Added
qualityandquality.cialiases for running format, credo, and dialyzer
[0.0.1] - Initial Release
Features
- Initial experimental Elixir port of RabbitMQ RA Raft consensus algorithm
- Leader election with pre-vote support
- Write-ahead log (WAL) with batched writes
- Log replication and snapshotting
- Cluster membership management
- Pluggable state machine interface
- Effects system for reply routing and notifications
- 85 passing unit tests