|
@@ -0,0 +1,22 @@
|
|
|
|
|
+# Ruaft: Raft implemented in Rust
|
|
|
|
|
+
|
|
|
|
|
+`Ruaft` is a Rust version of [the Raft consensus protocol](https://raft.github.io/). The name is clearly made up.
|
|
|
|
|
+
|
|
|
|
|
+At the moment it is a gigantic class lives in a single file. It exposes 4 APIs, to create a Raft instance (`new()`),
|
|
|
|
|
+start a new contract (`start()`), get the current status (`get_status()`) and shut it down (`kill()`). When a consensus
|
|
|
|
|
+is reached, it notifies the clients via an `apply_command` callback. It saves its internal state to local disk via a
|
|
|
|
|
+`persister`, which is supplied at creation.
|
|
|
|
|
+
|
|
|
|
|
+There are also
|
|
|
|
|
+two half-APIs: `process_append_entries()` and `process_request_vote()`, serving requests from other Raft instances of
|
|
|
|
|
+the same setup.
|
|
|
|
|
+
|
|
|
|
|
+The implementation is thoroughly tested. I copied the tests from an obvious source. To avoid being indexed by a search
|
|
|
|
|
+engine, I will not name the source. The testing framework from the same source is also translated from the original Go
|
|
|
|
|
+version. The code can be found at [`labrpc`](https://github.com/ditsing/labrpc) repo.
|
|
|
|
|
+
|
|
|
|
|
+## Next steps
|
|
|
|
|
+- [ ] Split into multiple files
|
|
|
|
|
+- [ ] Add public documentation
|
|
|
|
|
+- [ ] Add a proper RPC interface to all public methods
|
|
|
|
|
+- [ ] Benchmarks
|