For phase two of the project, you will work in pairs. One team member will implement concurrency control, the other will implement a commit protocol. You can use either of your code bases as the starting point. You will need to come to some agreement on how you will make use of the underlying transaction mechanisms, as what makes it easy for one task could make it hard for the other. You may choose to use multiple transactions running at each site, but you may not use transaction naming to get the underlying DBMS to manage transactions across sites.
You can implement whatever concurrency control mechanism you
think best - 2-phase locking, timestamp ordering, shadow
pages, or whatever you choose. You should support at
least row-level concurrency. You can augment the
database itself (e.g., put timestamps on rows) if that makes
it easier - as long as such additional information is
stripped
before data is presented (this can easily
be done as part of queries.) You must support at least the following:
You may find that there are things that you don't handle well. As long as you demonstrate the above, it is okay if there are some things you can't handle - as long as you are aware of (and document) the conditions under which your concurrency control fails.
This part of the project requires that you implement a distributed commit protocol, and demonstrate that you get correct results in spite of failure. You must support failure of any single site (including the one where the transaction is being entered). Any transactions running at the time must either abort or complete (including at the failed site when it recovers.) You may use the recovery mechanisms of the underlying databases, provided that this is independent for the separate tables (as with concurrency control above.) You need not crash the underlying DBMS - this can be simulated by having it abort any uncommitted transaction when a client (your server) crashes. You must demonstrate:
Your system does not need to be non-blocking in all cases, but you should document failures that can result in blocking or conditions that can result in an inconsistent database (hopefully you will have none of the above.)
For more details see the writeup for Project 1.
You will turn in this assignment by demoing it to me, along with a brief code walkthrough. Also upload a tar file with the code (just source and instructions on how to run - not binaries/etc.) to Blackboard Please email the possible times for an appointment by 3/5 - 30 minutes sometime between 11:30 and 17:00 on 3/13.