Design questions for Lab 2
View Server
- What data structures does your view server use to track alive nodes?
- When should a client communicate with the view server?
- What are the cases where you can do a view change?
- How do view changes affect the state on your servers?
Replication
- How does the primary verify that a request has successfully been replicated to the backup?
- 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 happens when a forwarded request (or its response) is dropped between the primary and backup?
- Are you using a separate forwarded request message or reusing the same request message type?
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?
- What state do you keep to track the status of a state transfer?
- How do you handle client requests during a pending state transfer?
- What happens if a state transfer message is dropped?
- What happens if an acknowledgement of a state transfer is dropped?