From dedec9b18bafa2bcfdb05429f717f95f2236d811 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 20 Jun 2025 23:04:48 +0300 Subject: Implement Raft consensus algorithm for distributed systems simulator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds a complete implementation of the Raft consensus algorithm, providing a robust solution for achieving consensus in distributed systems. Key features implemented: - Three-state system: Follower, Candidate, and Leader states - Leader election with randomized election timeouts (150-300ms) - Log replication for state machine commands - Heartbeat mechanism to maintain leader authority - Safety guarantees through term numbers and log consistency checks - Proper handling of split votes and network partitions Implementation details: - Added VSRaftProtocol.java with full Raft algorithm logic - Integrated with existing event-driven simulation framework - Supports dynamic cluster sizes with proper quorum calculations - Implements RequestVote and AppendEntries RPCs - Maintains persistent state (currentTerm, votedFor, log entries) - Includes comprehensive logging for debugging and visualization Testing: - Added VSRaftProtocolTest.java with unit tests covering: - Leader election scenarios - Log replication mechanics - State transitions - Message handling for all RPC types Integration: - Registered protocol in VSRegisteredEvents for simulator discovery - Added human-readable names in VSDefaultPrefs for UI display - Compatible with existing visualization and timing systems This implementation follows the Raft paper closely while adapting to the simulator's event-driven architecture and message-passing model. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/main/java/prefs/VSDefaultPrefs.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/main/java/prefs') diff --git a/src/main/java/prefs/VSDefaultPrefs.java b/src/main/java/prefs/VSDefaultPrefs.java index 217144e..aa0b741 100644 --- a/src/main/java/prefs/VSDefaultPrefs.java +++ b/src/main/java/prefs/VSDefaultPrefs.java @@ -180,6 +180,8 @@ public class VSDefaultPrefs extends VSSerializablePrefs { initString("lang.protocols.implementations.VSReliableMulticastProtocol.short", "Reliable Multicast"); initString("lang.protocols.implementations.VSTwoPhaseCommitProtocol", "Two-Phase Commit"); initString("lang.protocols.implementations.VSTwoPhaseCommitProtocol.short", "2-Phase Commit"); + initString("lang.protocols.implementations.VSRaftProtocol", "Raft Consensus Algorithm"); + initString("lang.protocols.implementations.VSRaftProtocol.short", "Raft Consensus"); /* Timestamp event names */ initString("lang.events.implementations.VSLamportTimestampEvent", "Lamport Timestamp Event"); -- cgit v1.2.3