https://github.com/nicktindall/java-raft
A Java implementation of the Raft consensus algorithm
https://github.com/nicktindall/java-raft
java mit-license raft-consensus-algorithm
Last synced: 2 months ago
JSON representation
A Java implementation of the Raft consensus algorithm
- Host: GitHub
- URL: https://github.com/nicktindall/java-raft
- Owner: nicktindall
- License: mit
- Created: 2019-01-29T04:38:05.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-05-12T01:55:42.000Z (over 1 year ago)
- Last Synced: 2024-05-12T11:57:03.418Z (over 1 year ago)
- Topics: java, mit-license, raft-consensus-algorithm
- Language: Java
- Size: 805 KB
- Stars: 16
- Watchers: 1
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# java-raft
[](https://circleci.com/gh/nicktindall/java-raft)
[](https://sonarcloud.io/dashboard?id=nicktindall_java-raft)
A Java implementation of the [Raft consensus algorithm](https://raft.github.io/)
## motivation
I'm implementing the protocol in order to get a more in-depth understanding of it. Also as a challenge to make a readable implementation of the "understandable" consensus algorithm.
## Status
The parts of the algorithm I have implemented (according to the thesis chapters) are:
|Chapter |Name | Status |
|----------|-------|----------|
| 3.4 | Leader election | :heavy_check_mark: |
| 3.5 | Log replication | :heavy_check_mark: |
| 3.6.1 | Election restriction | :heavy_check_mark: |
| 3.6.2 | Committing entries from previous terms | :heavy_check_mark: |
| 3.7 | Follower and candidate crashes | :heavy_check_mark: |
| 3.8 | Persisted state and server restarts | :heavy_check_mark: |
| 3.10 | Leadership transfer extension | :heavy_check_mark: |
| 4 | Cluster membership changes | :heavy_check_mark: |
| 4.2.1 | Catching up new servers | :heavy_check_mark: |
| 4.2.2 | Removing the current leader | :x: |
| 4.2.3 | Disruptive servers | :heavy_check_mark: |
| 4.3 | Arbitrary configuration changes using joint consensus | :x: |
| 5 | Log compaction | :heavy_check_mark: |
| 6.1 | Finding the cluster | :x: |
| 6.2 | Routing requests to the leader | :heavy_check_mark: |
| 6.3 | Implementing linearizable semantics | :heavy_check_mark: |
| 6.4 | Processing read-only queries more efficiently | :x: |
## Dependencies
The only runtime dependency is log4j 2, the aim is to implement with minimal dependencies