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?