aboutsummaryrefslogtreecommitdiff

Simple Paxos

Simple thread-based Python simulation of the Part-time Parliament consensus system used on the Greek island of Paxos, uncovered during archeological digs by computer scientist Leslie Lamport

Documentation ripped from code

Formats
Ledger

ballot number, decree n,d

Messagebook

(Priests will track these for changes by messengers)

from,code,ballot,decree

n,1/2/3,(voted at) ballot_number, (voted for) decree

voted_at_ballot: responding to next_ballot from priests decree decree voted at

codes (to leader): 1: last vote 2: vote: yes 3: vote: no

codes (from leader): 1: next ballot 2: begin ballot 3: succesful ballot 4: failed ballot

Dev log

DONE

  • skeleton
  • priest init
  • leader_main
  • god init
  • leader.next_ballot
  • messenger init
  • leader.messenger.send_next_ballot
  • priest_main
  • priest.messenger.send_last_vote
  • leader.begin_ballot
  • leader.messenger.send_begin_ballot
  • priest.vote
  • priest.messenger.send_vote
  • leader.evaluate
  • messenger.send_message (condensed messenger)

TODO - Actually satisfy B1 - Multiple god instance support

TODO future: - Implement priest promise after lastvote (one idea: priest send a message to himself. this would require a new field in messagebook: 'outgoing/self')

TODO far future: - Change messages between priests to go through sockets instead of files

God
  • Paxons are very religious; god controls anything and everything
  • Literally creates priests i.e. initializes the objects
Messenger
  • Messenger relays messages to and from the leader and the priest
  • She accomplishes this by tracking the priests' ledger files for changes
  • Each priest (including the leader) has a personal messenger (instance)
Priest
  • Priests are present (or not present) and vote (or not vote) for ballots proposed by the leader
  • They record all ballots they have participated in in individual ledger files