Olympus is a toy implementation of Hermes replication protocol in Rust. Its main purpose is not to be a production-ready implementation, but a learning platform.
There's a lot remaining to work on:
The write replay featureLeases based on PaxosVarious optimizations for TCP (namingly one socket per session)- Limit the number of tcp connect and use pools if applicable
- The Read-Modify-Write protocol
- Writes overlapping leases
Also, tests could go even further in order to verify the implementation against the TLA+ specification.
The setup is pretty clunky, but it goes this way:
- Run a cluster of olympus node (for instance with
./cluster.sh
) - Run
cargo run --bin fuzz_par_rw
with stands for fuzzy parallel reads and writes - Copy the output to a
olympus-analysis/history.clj
file that defines ahistory
array of the operations - Run
lein run
inolympus-analysis
to get the result
So far with 5 concurrent process and 2k operations, no anomalies were found.
- Antonios Katsarakis, Vasilis Gavrielatos, M.R. Siavash Katebzadeh, Arpit Joshi, Aleksandar Dragojevic, Boris Grot, and Vijay Nagarajan. 2020. Hermes: A Fast, Fault-Tolerant and Linearizable Replication Protocol. In Proceedings of the Twenty-Fifth International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS '20). Association for Computing Machinery, New York, NY, USA, 201–217. DOI
- Aleksandar Dragojević, Dushyanth Narayanan, Orion Hodson, and Miguel Castro. 2014. FaRM: fast remote memory. In Proceedings of the 11th USENIX Conference on Networked Systems Design and Implementation (NSDI'14). USENIX Association, USA, 401–414. link
- Leslie Lamport, Dahlia Malkhi, and Lidong Zhou. 2009. Vertical paxos and primary-backup replication. In Proceedings of the 28th ACM symposium on Principles of distributed computing (PODC '09). Association for Computing Machinery, New York, NY, USA, 312–313. DOI