public override void Accept(long version) { FromVersion = FromVersion == NO_VERSION ? version : Math.Min(FromVersion, version); ToVersion = ToVersion == NO_VERSION ? version : Math.Max(ToVersion, version); File logFile = LogFiles.getLogFileForVersion(version); Fs.deleteFile(logFile); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test void shouldCountAllLogFiles() throws Throwable //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: internal virtual void ShouldCountAllLogFiles() { CreateFileOfSize(_logFiles.getLogFileForVersion(0), 1); CreateFileOfSize(_logFiles.getLogFileForVersion(1), 2); assertEquals(3L, _storeSizeBean.TransactionLogsSize); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void pruneAndArchiveMultipleLogs() throws java.io.IOException //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void PruneAndArchiveMultipleLogs() { Life.start(); GenerateTransactionLogFiles(_logFiles); long highestCorrectLogFileIndex = 5; File highestCorrectLogFile = _logFiles.getLogFileForVersion(highestCorrectLogFileIndex); long fileSizeBeforePrune = highestCorrectLogFile.length(); int bytesToPrune = 7; long byteOffset = fileSizeBeforePrune - bytesToPrune; LogPosition prunePosition = new LogPosition(highestCorrectLogFileIndex, byteOffset); Life.shutdown(); _logPruner.truncate(prunePosition); Life.start(); assertEquals(6, _logFiles.logFiles().Length); assertEquals(byteOffset, highestCorrectLogFile.length()); File corruptedLogsDirectory = new File(_databaseDirectory, CorruptedLogsTruncator.CorruptedTxLogsBaseName); assertTrue(corruptedLogsDirectory.exists()); File[] files = corruptedLogsDirectory.listFiles(); assertEquals(1, Files.Length); File corruptedLogsArchive = files[0]; CheckArchiveName(highestCorrectLogFileIndex, byteOffset, corruptedLogsArchive); using (ZipFile zipFile = new ZipFile(corruptedLogsArchive)) { assertEquals(7, zipFile.size()); CheckEntryNameAndSize(zipFile, highestCorrectLogFile.Name, bytesToPrune); long nextLogFileIndex = highestCorrectLogFileIndex + 1; int lastFileIndex = TOTAL_NUMBER_OF_LOG_FILES - 1; for (long index = nextLogFileIndex; index < lastFileIndex; index++) { CheckEntryNameAndSize(zipFile, TransactionLogFiles.DEFAULT_NAME + "." + index, SINGLE_LOG_FILE_SIZE); } CheckEntryNameAndSize(zipFile, TransactionLogFiles.DEFAULT_NAME + "." + lastFileIndex, SINGLE_LOG_FILE_SIZE - 1); } }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldRecoverExistingData() throws Exception //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldRecoverExistingData() { File file = _logFiles.getLogFileForVersion(_logVersion); WriteSomeData(file, pair => { LogEntryWriter writer = pair.first(); Consumer <LogPositionMarker> consumer = pair.other(); LogPositionMarker marker = new LogPositionMarker(); // last committed tx consumer.accept(marker); LogPosition lastCommittedTxPosition = marker.newPosition(); writer.writeStartEntry(0, 1, 2L, 3L, new sbyte[0]); _lastCommittedTxStartEntry = new LogEntryStart(0, 1, 2L, 3L, new sbyte[0], lastCommittedTxPosition); writer.writeCommitEntry(4L, 5L); _lastCommittedTxCommitEntry = new LogEntryCommit(4L, 5L); // check point pointing to the previously committed transaction writer.writeCheckPointEntry(lastCommittedTxPosition); _expectedCheckPointEntry = new CheckPoint(lastCommittedTxPosition); // tx committed after checkpoint consumer.accept(marker); writer.writeStartEntry(0, 1, 6L, 4L, new sbyte[0]); _expectedStartEntry = new LogEntryStart(0, 1, 6L, 4L, new sbyte[0], marker.newPosition()); writer.writeCommitEntry(5L, 7L); _expectedCommitEntry = new LogEntryCommit(5L, 7L); return(true); }); LifeSupport life = new LifeSupport(); RecoveryMonitor monitor = mock(typeof(RecoveryMonitor)); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final java.util.concurrent.atomic.AtomicBoolean recoveryRequired = new java.util.concurrent.atomic.AtomicBoolean(); AtomicBoolean recoveryRequired = new AtomicBoolean(); try { StorageEngine storageEngine = mock(typeof(StorageEngine)); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.neo4j.kernel.impl.transaction.log.entry.LogEntryReader<org.neo4j.kernel.impl.transaction.log.ReadableClosablePositionAwareChannel> reader = new org.neo4j.kernel.impl.transaction.log.entry.VersionAwareLogEntryReader<>(); LogEntryReader <ReadableClosablePositionAwareChannel> reader = new VersionAwareLogEntryReader <ReadableClosablePositionAwareChannel>(); LogTailScanner tailScanner = GetTailScanner(_logFiles, reader); TransactionMetadataCache metadataCache = new TransactionMetadataCache(); LogicalTransactionStore txStore = new PhysicalLogicalTransactionStore(_logFiles, metadataCache, reader, _monitors, false); CorruptedLogsTruncator logPruner = new CorruptedLogsTruncator(_storeDir, _logFiles, FileSystemRule.get()); life.add(new Recovery(new DefaultRecoveryServiceAnonymousInnerClass(this, storageEngine, tailScanner, _transactionIdStore, txStore, _versionRepository, NO_MONITOR, recoveryRequired) , logPruner, _schemaLife, monitor, SilentProgressReporter.INSTANCE, false)); life.Start(); InOrder order = inOrder(monitor); order.verify(monitor, times(1)).recoveryRequired(any(typeof(LogPosition))); order.verify(monitor, times(1)).recoveryCompleted(2); assertTrue(recoveryRequired.get()); } finally { life.Shutdown(); } }