ev Fall 2001- CS514 Fault-tolerant Distributed Computer Systems - Programming Assignment, Phase V

Phase V: Agreement and Reconfiguration

Due: 8:00am Thursday, Dec. 6.

General Instructions. Students are required to work together in teams. You may work in the team you used for an earlier phase or you may form a new team. An assignment submitted on behalf of a "team" having fewer than 3 or more than 5 students will receive a grade of F. All members of the team are responsible for understanding the entire assignment.

This assignment builds on Phase IV. Feel free to use any team's solutions to that phase as the basis for your solution to this phase.

No late assignments will be accepted.

Academic Integrity. Collaboration between groups is prohibited and will be treated as a violation of the University's academic integrity code.

Background: Eliminating Simplifications

The solution to phase IV involved two significant simplifications---one explicit and one implicit. This assignment targets those simplifications. It gives you an opportunity to program an agreement protocol and to program a state machine recovery protocol. Among other things, extending the state-machine protocols you built in phase IV will give insights into the virtues of well-chosen interfaces software interfaces. Note, you are expected to extend what you (or some other group) submitted for phase IV---you should not modify abstractions or code that is unrelated to the agreement protocol or processor restart/recovery.

What to Build

The assumptions for this phase are the same as for the previous one: Agreement Protocol for Failstop Processors. Program the fail-stop reliable broadcast protocol discussed in class, and replace the naive broadcast routine that simulates an agreement protocol in your phase IV solution. Here are some pointers to descriptions of that fail-stop reliable broadcast protocol: For additional credit, feel free to implement a Byzantine agreement protocol. Note that to do this, you will have to make some synchrony assumptions about message delivery delays and clock skews. Depending on which Byzantine Agreement protocol you choose, you may also have to arrange for each host to have a public/private key pair---feel free to assume that these keys are pre-loaded and don't ever have to be changed.

Processor Restarts. "Recovery code" is executed following the repair of a faulty branch server. Phase IV ignored this; it's now time to write that recovery code. Your recovery code should reconstruct the state of the branch server for the local branch and for all branch server replicas that were being executed and failed along with it.

For testing your system, it's probably a good idea to extend the branch GUI with some additional status indicators to signal which replicas at that branch are operational, which are executing recovery code, and which are halted (due to failures).

State Machine Reconfiguration. An extremely flexible implementation of replicated state machines would provide a new management interface (accessible through a new GUI) that allows state machine replicas on any host to be terminated and allows new state machine replicas to be started on any host. The CONFIG file now is interpreted as defining the initial configuration for the system, and subsequent actions by system administrators (over this new interface) cause other configurations to exist.

Such a new management interface will get additional credit; we will be evaluating both the new interface, what it permits and doesn't permit, and how the new interface is integrated into existing system components (e.g., branch GUI). A good design for accomplishing system reconfiguration will build as much as possible on existing functionality. For example, terminating a server replica is not very different from a fail-stop failure and starting a server replica is not very different from restarting a server replica when a failed host is restarted.

A new GUI is not the only way to leverage the new management interface. One might also employ a configuration management process to instigate configuration changes. This process, for example, would start state-machine replicas in response to host failures so that the total number of replicas for each state machine remains near some preferred level. This configuration management process instigates action in response to processor failures and restarts. Credit will be awarded for sensible implementations of such functionality.

Submission Procedure. Create a directory containing the files you wish us to grade. Call this directory xxxxx0, where xxxxx is the Cornell network id of the team member whose net id is alphabetically smallest of your team. Then copy this directory to the following folder:

\\Goose\courses\cs514-fall01\proj05.submit

Don't be disturbed by warnings informing you that the file cannot be accessed after it has been copied.

Should you wish to revise your submission after you have copied it to our folder, then simply correct the files and re-copy the entire directory---but this time use the name xxxxx1. Revisions to that should be named xxxxx2, and so on. We will grade only the largest-numbered file of a series. No late submissions will be accepted.

Your directory should contain the following files (at least):

TEAM which contains the names (and net-ids) for all team members. Also, for each team member give a 1 or 2 paragraph description of the tasks this team member performed and the number of hours this required.

README which contains

LOGIC which contains a brief description of the specific protocols that were implemented.

CONFIG which contains a description of the numbers and locations of state machine replicas.

JAVA source file that contain the Java source needed to compile and test your system.

Grading. Your grade will be based on the following elements: