What if Google's Chubby were implemented as a self-sufficient Rust library and
"trivially" useful binary? This is the question I asked myself, and this
project is some dabbling in answering it.
At this time, nothing works and this project is aspirational. From there,
hopefully it will become experimental, and then... maybe, just maybe, we can get
to a feature-complete Chubby clone that can reach "sustainable" maintenance.
Goals:
* [ ] A [Sans-I/O](https://sans-io.readthedocs.io/) implementation of all
"supported" functionality -- i.e. a fully described state machine which
prescribes nothing about the network layer / async or not / etc.
* [ ] Support lock files of less than 1MB in memory
* [ ] Full lock file replication among peers, write ACK only after quorum is reached
on write
* [ ] A full server implementation which uses gRPC
* [ ] Full test coverage
* [ ] Complete validation suite for sans-I/O core
Non-goals:
* Writing out lock files to disk, etc. If you want this, write a wrapper or a
client to manage it.
* Support *your distributed consensus algorithm of choice*
* Low latency. Hubby promises your latency will be high. Leader election
should be done deliberately and without rushing ;).
Project structure:
* The [`/hubby`](https://crates.io/crates/hubby) crate represents the
server/service. It will contain a gRPC library to surface from any "embedding"
server and a standalone server binary for general use.
* The [`/hubby-core`](https://crates.io/crates/hubby-core) crate represents the
core sans-I/O library for the Hubby service.
Where does the name come from?
2) Hubby is a supportive partner in your distributed systems journey.
1) Chubby-style locking services generally represent consensus and
configuration hubs for distributed systems -- thus hub-by.
3) Hubby has an edit distance of one from the originating paper.