/rustypaxos

Paxos in rust. This is a work-in-progress carve-out.

Primary LanguageRust

Paxos in Rust
=============


Error Handling
==============

TODO Describe the error handling philosophy here.  This section is referred to
by name in src/lib.rs

Durability
==========

TODO Describe the durability philosophy here.  This section is referred to
by name in src/lib.rs

TODO
====

- There has to be a way to encode quorum into the type system
- Client message forwarding
- Verification "scripts" for doing bad things
- optimization of replica running multiple proposers
- bind commands to slots should transmit only those new commands
- eliminate copying of pvalues
- move core types into own module
- do something with wrong recipients
- check that proposers lame duck themselves
- restart
- add node
- lots of copying that probably doesn't have to happen
- tests for late arriving acceptors
- when a pvalue gets overwritten on phase1 add to enqueued

- doc optimization about replica quorum

- simulate misdelivery
- sort out the replicaID passed to process_*
- test simulator determinism

Corner Cases:
- leader failover guarantees same decision decided twice
- twist delivery to prioritize certain message types
- dualing proposers
- simulator two instances, same replica id


Insights
========
// This protocol is often compared to two-phase commit, but such a comparison
// is slightly flawed.  In two phase commit, a node promises and locks the
// promise.   In paxos it does not lock and can abandon.  Blah de blah