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
Getoperations 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
AMOApplicationhandle 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?