private void buildRecovery( final FileSystemAbstraction fileSystemAbstraction, TransactionIdStore transactionIdStore, LogTailScanner tailScanner, RecoveryMonitor recoveryMonitor, RecoveryStartInformationProvider.Monitor positionMonitor, final LogFiles logFiles, StorageEngine storageEngine, LogicalTransactionStore logicalTransactionStore, LogVersionRepository logVersionRepository ) { RecoveryService recoveryService = new DefaultRecoveryService( storageEngine, tailScanner, transactionIdStore, logicalTransactionStore, logVersionRepository, positionMonitor ); CorruptedLogsTruncator logsTruncator = new CorruptedLogsTruncator( databaseLayout.databaseDirectory(), logFiles, fileSystemAbstraction ); ProgressReporter progressReporter = new LogProgressReporter( logService.getInternalLog( Recovery.class ) ); Recovery recovery = new Recovery( recoveryService, logsTruncator, recoveryMonitor, progressReporter, failOnCorruptedLogFiles ); life.add( recovery ); }
private boolean recover( File storeDir, LogFiles logFiles ) { LifeSupport life = new LifeSupport(); RecoveryMonitor monitor = mock( RecoveryMonitor.class ); final AtomicBoolean recoveryRequired = new AtomicBoolean(); try { StorageEngine storageEngine = mock( StorageEngine.class ); final LogEntryReader<ReadableClosablePositionAwareChannel> reader = new VersionAwareLogEntryReader<>(); 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 DefaultRecoveryService( storageEngine, tailScanner, transactionIdStore, txStore, versionRepository, NO_MONITOR ) { @Override public void startRecovery() { recoveryRequired.set( true ); } }, logPruner, monitor, SilentProgressReporter.INSTANCE, false ) ); life.start(); } finally { life.shutdown(); } return recoveryRequired.get(); }
@Before public void setUp() throws Exception { databaseDirectory = testDirectory.databaseDir(); SimpleLogVersionRepository logVersionRepository = new SimpleLogVersionRepository(); SimpleTransactionIdStore transactionIdStore = new SimpleTransactionIdStore(); logFiles = LogFilesBuilder.logFilesBasedOnlyBuilder( databaseDirectory, fileSystemRule ) .withRotationThreshold( LogHeader.LOG_HEADER_SIZE + 9L ) .withLogVersionRepository( logVersionRepository ) .withTransactionIdStore( transactionIdStore ).build(); life.add( logFiles ); logPruner = new CorruptedLogsTruncator( databaseDirectory, logFiles, fileSystemRule ); }
LogicalTransactionStore txStore = new PhysicalLogicalTransactionStore( logFiles, metadataCache, reader, monitors, false ); CorruptedLogsTruncator logPruner = new CorruptedLogsTruncator( storeDir, logFiles, fileSystemRule.get() ); life.add( new Recovery( new DefaultRecoveryService( storageEngine, tailScanner, transactionIdStore, txStore, versionRepository, NO_MONITOR )
LogicalTransactionStore txStore = new PhysicalLogicalTransactionStore( logFiles, metadataCache, reader, monitors, false ); CorruptedLogsTruncator logPruner = new CorruptedLogsTruncator( storeDir, logFiles, fileSystemRule.get() ); life.add( new Recovery( new DefaultRecoveryService( storageEngine, tailScanner, transactionIdStore, txStore, versionRepository, NO_MONITOR )
CorruptedLogsTruncator logPruner = new CorruptedLogsTruncator( databaseDirectory, logFiles, fileSystemRule.get() ); life.add( new Recovery( new RecoveryService()
private void buildRecovery( final FileSystemAbstraction fileSystemAbstraction, TransactionIdStore transactionIdStore, LogTailScanner tailScanner, RecoveryMonitor recoveryMonitor, RecoveryStartInformationProvider.Monitor positionMonitor, final LogFiles logFiles, StorageEngine storageEngine, LogicalTransactionStore logicalTransactionStore, LogVersionRepository logVersionRepository ) { RecoveryService recoveryService = new DefaultRecoveryService( storageEngine, tailScanner, transactionIdStore, logicalTransactionStore, logVersionRepository, positionMonitor ); CorruptedLogsTruncator logsTruncator = new CorruptedLogsTruncator( databaseLayout.databaseDirectory(), logFiles, fileSystemAbstraction ); ProgressReporter progressReporter = new LogProgressReporter( logService.getInternalLog( Recovery.class ) ); Recovery recovery = new Recovery( recoveryService, logsTruncator, recoveryMonitor, progressReporter, failOnCorruptedLogFiles ); life.add( recovery ); }