FT Baseline: What to expect and look for Fault Tolerance: =================== Two servers will be running on two computers. We have no distinction between "primary" and "backup" servers. The processing for a game may be distributed across multiple servers. Servers lock the database when they read and unlock after they write. This ensures determinism for the servers. Because of this, all state is stored in the database and therefore no checkpointing is used. When a client contacts the naming service, it retrieves the entire list of servers that support the GameServer object. When a fault occurs (a server is ctrl-c'ed), the client chooses a new server and attempts to connect to it. If none of the servers can be connected to, then the client reconnects to the naming service in order to download a new list of servers. If this list is null, the game cannot continue until a new server registers with the naming service. A fault may not be caused until clients have finished their exchange with the naming service. Recovery: =================== "Girltalk" does not seem to run the server application well. "Monopoly" does not seem to run the client application well. On a successful recovery run, you can expect clients to display a message indicating which server they have reconnected to and the name of the fault that triggered the reconnect. The game will then continue. Exception Handling: =================== Currently, exceptions are handled only for Game::Update(). The reason we decided to implement this first is because it is called most frequently. Handling of exceptions for naming-service related exceptions has not been implemented. Most non-CORBA related exceptions have not been caught. How to run the fault tolerant demo: ==================================== 1) set library path: export LD_LIBRARY_PATH=/afs/ece/class/ece749/public_html/teams/team7/orbacus/lib 2) create a symbolic link onto the directory you extracted the .tar file on. ln -s /afs/ece/class/ece749/public_html/teams/team7/orbacus orbacus 3) make the source code. (Type "make" in /src/) 4) run the nameserver (Execute /src/common/runname.sh) 5) run the servers on multiple computers (cwd to /src/server/, execute runserver.sh $1, where $1 is sequentially increasing from 1 and identifies the server to the naming service. Servers must be started in order, and a server must display "Binding Gameserver $1 To Naming Service" before another server is started) 6) run the clients on muliple computers (cwd to /src/client/ascii_client, execute runclient.sh $1, where $1 indicates which server to connect to. $1 must be the id of a valid server) 7) ctrl-c server 0, and witness the clients reconnect to server 1. 8) rerun server 0, and ctrl-c server 1. Watch the clients reconnect to server 0