public void recover() { doRecover(); int lsn = new CheckpointRecord().writeToLog(); SimpleDB.logMgr().flush(lsn); }
internal void flush() {//将Page写回磁盘块,若当前Page为脏,那么先将它的日志记录写回磁盘块,再将page写回 if (modifiedBy >= 0) { SimpleDB.logMgr().flush(logSequenceNumber); contents.write(blk); modifiedBy = -1;//修改的事务id置为负数 } }
public void rollback() {//写一个ROLLBACK日志,然后将这个日志记录写回磁盘 //所有被当前该事务修改过的脏数据页的“修改日志”写回磁盘,再将脏页写回磁盘 SimpleDB.bufferMgr().flushAll(txnum); doRollback();//回滚当前事务直到看到START日志记录 int lsn = new RollbackRecord(txnum).writeToLog(); SimpleDB.logMgr().flush(lsn); }
public void commit() {//写一个COMMIT记录到日志,然后将这个日志记录写回磁盘 //所有被当前该事务修改过的脏数据页,先写“修改日志”到磁盘,再将脏页写回磁盘 SimpleDB.bufferMgr().flushAll(txnum); //写一个COMMIT记录到日志 int lsn = new CommitRecord(txnum).writeToLog(); //将该日志写回磁盘 SimpleDB.logMgr().flush(lsn); }