Testing:
Next: Retrospective:
Up: MINIREL : Recovery Manager
Previous: Accomplishments:
We created test scripts of increasing complexity to test our code. Initially,
we tested the basic aborts, rollbacks and checkpoints. We then tested the
restart. Since we implemented page flush and buffer pool commands, we were
able to make sure that if a transaction did not commit, but its page was
flushed to disk, the restart phase would undo the changes of that transaction.
The final tests tried multiple crashes during restart. During testing,
we found situations which seldom arise in practice, but could cause
problems. For
example : We provide a function GetRecoveryLSN() which is invoked
by the Buffer Manager.
This function is used by the Buffer Manager to
initialize the 'recovery lsn' field in the Dirty Page Table.
The recovery lsn indicates the point where the 'Redo' phase would
begin, for the specified page, in the event of a crash.
During the Normal Mode of operation of the Recovery Manager, the
recovery lsn value is supplied by the Log Manager. The Log Manager returns
the next valid lsn of the log. We discovered that this was not true if
the Recovery Manager was running in the Restart Mode.
The page is not in a consistent state during Restart and the value from
the log will not provide the correct value. So, we retrieve the value
of the 'recovery lsn' from the local Dirty Page Table.
ranjani ramamurthy
Sat May 13 16:56:49 CDT 1995