Skip to main content

CSEP 552: Lab 2 design questions

Design draft due Monday, October 19 at 11:59pm on Gradescope.

Lecture described the primary-backup protocol at a high level. Below we list several design decisions you will need to make in order to complete your protocol design.

Please choose at least 3 questions below that you think are interesting/challenging, and briefly sketch your ideas or questions about them. Submit your results as a PDF to Gradescope. We will then discuss these issues in class on October 20.

View server

  • What does the view server need to keep track of about each server?
  • What are the cases where you can do a view change? Which servers are eligible to be the new primary?
  • When does the view server consider a view acknowledged, and what does it refuse to do before then? What if the primary's acknowledging ping is dropped?
  • Can View 1 (primary A, no backup) change to View 2 (primary B, backup C) if A dies? What goes wrong if it does?
  • For each case, what is the next view: the primary fails (view already acknowledged); the backup fails; the primary fails with no backup; both primary and backup fail at once.
  • How do view changes affect the state on your servers? Is the view number on every message, and what does a node do with a message from an older view?

Clients

  • How does a client learn the current primary, and when does it ask the view server again?
  • What does a client do with a response from a server that is no longer the primary, or with no response at all?

Replication

  • How does the primary verify that a request has successfully been replicated to the backup?
  • Why must the primary forward Get operations to the backup before responding? What goes wrong if it does not?
  • When might a node ignore a forwarded request it receives?
  • How do you ensure consistent ordering of request execution between the primary and backup?
  • How do you handle simultaneous client requests arriving at the primary? What does the primary do with a new request before the backup has acknowledged the previous one?
  • What happens when a forwarded request, or its acknowledgment, is dropped? Delivered twice? Delivered after a newer one? What does AMOApplication handle for you, and what does it not?
  • Describe a sequence in which an old primary still believes it is the primary. Which check in your protocol stops it from answering a client?

State transfer

  • How do you know when to start a state transfer?
  • What conditions should a node check if it receives a state transfer message? How do you make sure the backup's state is overwritten only once per view?
  • What state do you keep to track the status of a state transfer?
  • How do you handle client requests during a pending state transfer, and why can't you process them?
  • What happens if a state transfer message is dropped? If its acknowledgment is dropped?
  • What do the primary's pings to the view server say while a state transfer is in progress, and why does that matter?
  • What does your primary do in a view with no backup? What changes when a backup appears?