public void CanWriteMultipleRollbackRecordsToLog() { _logRecord = new RollbackRecord(_logManager, _bufferManager, 1); var lsn = _logRecord.WriteToLog(); var lsn2 = new RollbackRecord(_logManager, _bufferManager, 2).WriteToLog(); _logManager.Flush(lsn2); var page = _fileManager.ResolvePage(); _ = page.Read(new Block(_logFileName, 0)); _ = page.GetInt(0, out var nextResPosition); _ = page.GetInt(sizeof(int), out var recordType1); _ = page.GetInt(sizeof(int) * 2, out var transactionId1); _ = page.GetInt(12 + 0, out var recordLength2); _ = page.GetInt(12 + sizeof(int), out var recordType2); _ = page.GetInt(12 + sizeof(int) * 2, out var transactionId2); Assert.AreEqual(0, lsn); Assert.AreEqual(1, lsn2); Assert.AreEqual((sizeof(int) + sizeof(LogRecordType) + sizeof(int)) * 2, nextResPosition); Assert.AreEqual((int)LogRecordType.Rollback, recordType1); Assert.AreEqual(1, transactionId1); Assert.AreEqual(0, recordLength2); Assert.AreEqual((int)LogRecordType.Rollback, recordType2); Assert.AreEqual(2, transactionId2); }
public void Rollback() { _bufferManager.FlushAll(_transactionNumber); DoRollback(); int lsn = new RollbackRecord(_logManager, _bufferManager, _transactionNumber) .WriteToLog(); _logManager.Flush(lsn); }
public void CanReadRollbackRecord() { var rec = new RollbackRecord(_logManager, _bufferManager, 5); var lsn = rec.WriteToLog(); _logManager.Flush(lsn); _enumerator = new LogRecordEnumerator(_logManager, _bufferManager); var record = _enumerator.Current as RollbackRecord; Assert.AreEqual(LogRecordType.Rollback, record.Type); Assert.AreEqual(5, record.TransactionNumber); }
public void CanReadBackwardsFromLog() { _logRecord = new RollbackRecord(_logManager, _bufferManager, 1); var lsn = _logRecord.WriteToLog(); _logManager.Flush(lsn); var enumerator = _logManager.GetEnumerator(); var basicLogRecord = enumerator.Current; var logRecord = new RollbackRecord(_logManager, _bufferManager, basicLogRecord); Assert.AreEqual(LogRecordType.Rollback, logRecord.Type); Assert.AreEqual(1, logRecord.TransactionNumber); }
public void CanRollback() { _recoveryManager = new RecoveryManager(_bufferManager, _logManager, 6); var block = new Block(RandomFilename, 0); var buffer = _bufferManager.Pin(block); _recoveryManager.Rollback(); _bufferManager.Unpin(buffer); _bufferManager.FlushAll(6); var page = _fileManager.ResolvePage(); _ = page.Read(new Block(_name, 0)); var enumerator = _logManager.GetEnumerator(); var record = enumerator.Current; var commitRecord = new RollbackRecord(_logManager, _bufferManager, record); Assert.AreEqual(LogRecordType.Rollback, commitRecord.Type); Assert.AreEqual(6, commitRecord.TransactionNumber); }