Design questions for Lab 3

Phase 1

  • What state do you keep to indicate whether or not you are the leader?
  • How do you know you are the leader?

1a

  • At what point do Paxos servers know to start looking for heartbeat messages?
  • When do you ignore p1a's? When do you act on them? Can you act on them while in phase 2?

1b

  • Is it possible to receive 1b messages with a ballot larger than your current ballot? Why or why not?
  • When do you ignore p1b's? When do you act on them?
  • Are you merging logs "on the fly" or keeping track of logs till you see a majority? Or something else? Justify your design decision.
  • When does the leader stop merging logs?
  • What data structure are you using to record p1b's? When does this data structure get initialized/cleared?

Phase 2

  • When do you know the leader is dead?

2a

  • How do you handle 2a's with larger ballot numbers than your ballot number?
  • What causes 2a requests to be sent?

2b

  • What data structure are you using to keep track of 2b responses?
  • How do you know to try progressing slot out?

“Phase 3” (Log propagation and Garbage Collection)

  • Does phase 3 happen concurrently with phase 2?
  • What messages are you "piggybacking" to share log decisions and garbage collection information?
  • What data structure are the nodes going to use to keep track of who has executed what commands?