generateTransactionLogFiles( logFiles ); checkArchiveName( highestCorrectLogFileIndex, byteOffset, corruptedLogsArchive ); try ( ZipFile zipFile = new ZipFile( corruptedLogsArchive ) ) checkEntryNameAndSize( zipFile, highestCorrectLogFile.getName(), 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 );
@Test public void doNotPruneNonCorruptedLogs() throws IOException { life.start(); generateTransactionLogFiles( logFiles ); long highestLogVersion = logFiles.getHighestLogVersion(); long fileSizeBeforePrune = logFiles.getHighestLogFile().length(); LogPosition endOfLogsPosition = new LogPosition( highestLogVersion, fileSizeBeforePrune ); assertEquals( TOTAL_NUMBER_OF_LOG_FILES - 1, highestLogVersion ); logPruner.truncate( endOfLogsPosition ); assertEquals( TOTAL_NUMBER_OF_LOG_FILES, logFiles.logFiles().length ); assertEquals( fileSizeBeforePrune, logFiles.getHighestLogFile().length() ); assertTrue( ArrayUtil.isEmpty( databaseDirectory.listFiles( File::isDirectory ) ) ); }
@Test public void pruneAndArchiveLastLog() throws IOException { life.start(); generateTransactionLogFiles( logFiles ); long highestLogVersion = logFiles.getHighestLogVersion(); File highestLogFile = logFiles.getHighestLogFile(); long fileSizeBeforePrune = highestLogFile.length(); int bytesToPrune = 5; long byteOffset = fileSizeBeforePrune - bytesToPrune; LogPosition prunePosition = new LogPosition( highestLogVersion, byteOffset ); logPruner.truncate( prunePosition ); assertEquals( TOTAL_NUMBER_OF_LOG_FILES, logFiles.logFiles().length ); assertEquals( byteOffset, highestLogFile.length() ); File corruptedLogsDirectory = new File( databaseDirectory, CorruptedLogsTruncator.CORRUPTED_TX_LOGS_BASE_NAME ); assertTrue( corruptedLogsDirectory.exists() ); File[] files = corruptedLogsDirectory.listFiles(); assertEquals( 1, files.length ); File corruptedLogsArchive = files[0]; checkArchiveName( highestLogVersion, byteOffset, corruptedLogsArchive ); try ( ZipFile zipFile = new ZipFile( corruptedLogsArchive ) ) { assertEquals( 1, zipFile.size() ); checkEntryNameAndSize( zipFile, highestLogFile.getName(), bytesToPrune ); } }