예제 #1
0
        public override void undo(int txnum)
        {
            BufferMgr buffMgr = SimpleDB.bufferMgr();
            Buffer    buff    = buffMgr.pin(blk);

            buff.setString(offset, val, txnum, -1);
            buffMgr.unpin(buff);
        }
예제 #2
0
        public void rollback()
        {//写一个ROLLBACK日志,然后将这个日志记录写回磁盘
            //所有被当前该事务修改过的脏数据页的“修改日志”写回磁盘,再将脏页写回磁盘
            SimpleDB.bufferMgr().flushAll(txnum);
            doRollback();//回滚当前事务直到看到START日志记录
            int lsn = new RollbackRecord(txnum).writeToLog();

            SimpleDB.logMgr().flush(lsn);
        }
예제 #3
0
        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);
        }
예제 #4
0
        public void commit()
        {//写一个COMMIT记录到日志,然后将这个日志记录写回磁盘
            //所有被当前该事务修改过的脏数据页,先写“修改日志”到磁盘,再将脏页写回磁盘
            SimpleDB.bufferMgr().flushAll(txnum);
            //写一个COMMIT记录到日志
            int lsn = new CommitRecord(txnum).writeToLog();

            //将该日志写回磁盘
            SimpleDB.logMgr().flush(lsn);
        }
예제 #5
0
 public void recover()
 {/* 将所有被该事务修改过的buffer页flush;从后往前遍历日志记录,回滚所有未提交的事务
   * 最后写一个静态检查点记录到日志;这个函数只在系统启动时、在用户事务前调用*/
     SimpleDB.bufferMgr().flushAll(txnum);
     recoveryMgr.recover();
 }