An implementation of the Raft consensus protocol with static membership in the Bloom programming language.
We have implemented Leader Election and Log Replication as two separate modules.
For the purpose of test driving the log replication module, we have also implemented an ordered, consistent, and distributed simple calculator.
This was made as a final project for Joe Hellerstein and Peter Alvaro's Programming the Cloud course at UC Berkeley.
This is currently a work in progress. We believe most of the functionality is in place, but there are a few issues that could potentially cause data loss or corruption. Thus in its current state, we do not recommend the use of whitewater in production.
Thanks to Diego Ongaro for providing guidance on the Raft protocol and for reviewing our code for correctness issues.
Thanks to Peter Alvaro for general guidance and advice on how to best implement configurable timers in Bloom.