CS432 Assignment 6:
Transaction Simulation & Crash Recovery

 

Goal

In this assignment you will complete certain parts of a database engine. The database is modeled very simply, and runs by executing a series of transaction operations given to it by the user. Each transaction performs a series of reads and writes on the pages of the database, and can commit or abort at any time.

The simulator keeps a recovery manager module that keeps a log of the database's activity. At any point in time, the database may crash (specifically, when it encounters a special command to induce a crash). The recovery manager then performs a restart to restore the database to a correct state, using the Aries recovery algorithm.

Note: You will not have to write a lot of code for this assignment, but there are many small details to take care of when writing an ARIES-style recovery manager. We strongly suggest that you start soon. In addition, it is worthwhile to write pseudo-code before you start coding, and to make sure that you understand all the different components of the assignment.

Background - The Transaction Simulator

The transaction simulator works just like a mini-database. There is a series of pages stored in a file on disk, accessed through a buffer. Transactions are modeled as a sequence of reads and writes to the pages of the database. A log is kept of all changes to database pages, with WAL used to insure that committed transactions are fully represented by the log as written to stable storage. Checkpoints can be inserted at will.

This assignment uses an application called MARS which is a GUI for testing the simulator. The input comes from .mars files that can be found in the folder Tests. These files can be edited using any simple text editor. The syntax for commands to the simulator is discussed in Getting Started with the Simulator.

A breakdown of the major components follows:

When you have included your modification and are ready to test your code, you can run the Mars.exe file generated by visual studio when you compile the project. When you are generating the Mars.exe file it is recommended that you build the release version of the project.

Assignment Details

Your Task

You will implement various pieces of the recovery module. Specifically, you will implement the functionality to handle the most basic and common of transactions, the write (WriteUpdateLog()). You must add code to the logging mechanism so that writes (also called updates) to the pages of the DB are reflected in the log, and then implement those parts of the restart mechanism that deal specifically with those log entries to restore the database to a consistent state.

The code you will write belongs in these modules:

Submission procedure

Create a zip file that contains the following files, and upload the zip file into the course management system by the deadline.

Keep a copy of the project in your own account just in case.

Grading

Your assignments will be graded according to the following criteria:

  1. Correctness (70%): You will get full marks for a correct implementation. Partial credit will be to partially correct answers.
  2. Documentation (20%): An explanation of your code, including any assumptions made, and any deviations from the standard Aries recovery scheme given in the text. Include some comments on the design of the recovery manager, including problems you saw and ways to improve the code. Call your document documentation.doc.
  3. Coding Style (10% ): You are expected to write neat code. Code should be properly indented and commented. You should follow the coding conventions.

Hints

 

Reference

The following pages provide more detailed explanations about the classes and types that will be useful for this assignment.

 

Minor Bugs