public override void undo(int txnum) { BufferMgr buffMgr = SimpleDB.bufferMgr(); Buffer buff = buffMgr.pin(blk); buff.setString(offset, val, txnum, -1); buffMgr.unpin(buff); }
public void rollback() {//写一个ROLLBACK日志,然后将这个日志记录写回磁盘 //所有被当前该事务修改过的脏数据页的“修改日志”写回磁盘,再将脏页写回磁盘 SimpleDB.bufferMgr().flushAll(txnum); doRollback();//回滚当前事务直到看到START日志记录 int lsn = new RollbackRecord(txnum).writeToLog(); SimpleDB.logMgr().flush(lsn); }
public override void undo(int txnum) { BufferMgr buffMgr = SimpleDB.bufferMgr(); //将块绑定到(读入)缓冲区 Buffer buff = buffMgr.pin(blk); //LSN为负数,生成一条临时日志记录,不保存到磁盘 buff.setInt(offset, val, txnum, -1); buffMgr.unpin(buff); }
public void commit() {//写一个COMMIT记录到日志,然后将这个日志记录写回磁盘 //所有被当前该事务修改过的脏数据页,先写“修改日志”到磁盘,再将脏页写回磁盘 SimpleDB.bufferMgr().flushAll(txnum); //写一个COMMIT记录到日志 int lsn = new CommitRecord(txnum).writeToLog(); //将该日志写回磁盘 SimpleDB.logMgr().flush(lsn); }
public void recover() {/* 将所有被该事务修改过的buffer页flush;从后往前遍历日志记录,回滚所有未提交的事务 * 最后写一个静态检查点记录到日志;这个函数只在系统启动时、在用户事务前调用*/ SimpleDB.bufferMgr().flushAll(txnum); recoveryMgr.recover(); }