public static void assertRecoveryIsNotRequired( FileSystemAbstraction fs, PageCache pageCache, Config config, DatabaseLayout databaseLayout, Monitors monitors ) throws RecoveryRequiredException, IOException { if ( new RecoveryRequiredChecker( fs, pageCache, config, monitors ).isRecoveryRequiredAt( databaseLayout ) ) { throw new RecoveryRequiredException(); } } }
private void assertRecovered( DatabaseLayout databaseLayout, Config config, FileSystemAbstraction fileSystem, PageCache pageCache ) throws ConsistencyCheckIncompleteException { try { assertRecoveryIsNotRequired( fileSystem, pageCache, config, databaseLayout, new Monitors() ); } catch ( RecoveryRequiredException | IOException e ) { throw new ConsistencyCheckIncompleteException( e ); } }
@Test public void shouldNotWantToRecoverIntactStore() throws Exception { PageCache pageCache = pageCacheRule.getPageCache( fileSystem ); RecoveryRequiredChecker recoverer = getRecoveryCheckerWithDefaultConfig( fileSystem, pageCache ); assertThat( recoverer.isRecoveryRequiredAt( databaseLayout ), is( false ) ); }
private RecoveryRequiredChecker getRecoveryChecker( FileSystemAbstraction fileSystem, PageCache pageCache, Config config ) { return new RecoveryRequiredChecker( fileSystem, pageCache, config, monitors ); }
@Test public void shouldWantToRecoverBrokenStore() throws Exception { try ( FileSystemAbstraction fileSystemAbstraction = createAndCrashWithDefaultConfig() ) { PageCache pageCache = pageCacheRule.getPageCache( fileSystemAbstraction ); RecoveryRequiredChecker recoverer = getRecoveryCheckerWithDefaultConfig( fileSystemAbstraction, pageCache ); assertThat( recoverer.isRecoveryRequiredAt( databaseLayout ), is( true ) ); } }
CoreBootstrapper( File storeDir, PageCache pageCache, FileSystemAbstraction fs, Config config, LogProvider logProvider, Monitors monitors ) { this.storeDir = storeDir; this.pageCache = pageCache; this.fs = fs; this.config = config; this.logProvider = logProvider; this.log = logProvider.getLog( getClass() ); this.recoveryRequiredChecker = new RecoveryRequiredChecker( fs, pageCache, config, monitors ); }
private boolean isUnclean( FileSystemAbstraction fileSystem ) throws IOException { PageCache pageCache = pageCacheRule.getPageCache( fileSystem ); RecoveryRequiredChecker requiredChecker = new RecoveryRequiredChecker( fileSystem, pageCache, Config.defaults(), monitors ); return requiredChecker.isRecoveryRequiredAt( testDirectory.databaseLayout() ); } }
private void checkDbState( DatabaseLayout databaseLayout, Config tuningConfiguration ) throws ToolFailureException { try ( JobScheduler jobScheduler = createInitialisedScheduler(); PageCache pageCache = ConfigurableStandalonePageCacheFactory.createPageCache( fs, tuningConfiguration, jobScheduler ) ) { assertRecoveryIsNotRequired( fs, pageCache, tuningConfiguration, databaseLayout, new Monitors() ); } catch ( RecoveryRequiredException rre ) { throw new ToolFailureException( rre.getMessage() ); } catch ( Exception e ) { systemError.printf( "Failure when checking for recovery state: '%s', continuing as normal.%n", e ); } }
@Test public void shouldBeAbleToRecoverBrokenStore() throws Exception { try ( FileSystemAbstraction fileSystemAbstraction = createAndCrashWithDefaultConfig() ) { PageCache pageCache = pageCacheRule.getPageCache( fileSystemAbstraction ); RecoveryRequiredChecker recoverer = getRecoveryCheckerWithDefaultConfig( fileSystemAbstraction, pageCache ); assertThat( recoverer.isRecoveryRequiredAt( databaseLayout ), is( true ) ); new TestGraphDatabaseFactory().setFileSystem( fileSystemAbstraction ).newImpermanentDatabase( storeDir ).shutdown(); assertThat( recoverer.isRecoveryRequiredAt( databaseLayout ), is( false ) ); } }
public static void assertRecoveryIsNotRequired( FileSystemAbstraction fs, PageCache pageCache, Config config, DatabaseLayout databaseLayout, Monitors monitors ) throws RecoveryRequiredException, IOException { if ( new RecoveryRequiredChecker( fs, pageCache, config, monitors ).isRecoveryRequiredAt( databaseLayout ) ) { throw new RecoveryRequiredException(); } } }
private static void checkDbState( DatabaseLayout databaseLayout, Config additionalConfiguration ) throws CommandFailed { try ( FileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction(); JobScheduler jobScheduler = createInitialisedScheduler(); PageCache pageCache = ConfigurableStandalonePageCacheFactory .createPageCache( fileSystem, additionalConfiguration, jobScheduler ) ) { assertRecoveryIsNotRequired( fileSystem, pageCache, additionalConfiguration, databaseLayout, new Monitors() ); } catch ( RecoveryRequiredException rre ) { throw new CommandFailed( rre.getMessage() ); } catch ( Exception e ) { throw new CommandFailed( "Failure when checking for recovery state: '%s'." + e.getMessage(), e ); } }
private void recoverBrokenStoreWithConfig( Config config ) throws IOException { try ( FileSystemAbstraction fileSystemAbstraction = createSomeDataAndCrash( storeDir, fileSystem, config ) ) { PageCache pageCache = pageCacheRule.getPageCache( fileSystemAbstraction ); RecoveryRequiredChecker recoverer = getRecoveryChecker( fileSystemAbstraction, pageCache, config ); assertThat( recoverer.isRecoveryRequiredAt( databaseLayout ), is( true ) ); new TestGraphDatabaseFactory() .setFileSystem( fileSystemAbstraction ) .newEmbeddedDatabaseBuilder( storeDir ) .setConfig( config.getRaw() ) .newGraphDatabase() .shutdown(); assertThat( recoverer.isRecoveryRequiredAt( databaseLayout ), is( false ) ); } }
private static void checkDbState( DatabaseLayout databaseLayout, Config additionalConfiguration ) throws CommandFailed { try ( FileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction(); JobScheduler jobScheduler = createInitialisedScheduler(); PageCache pageCache = ConfigurableStandalonePageCacheFactory.createPageCache( fileSystem, additionalConfiguration, jobScheduler ) ) { RecoveryRequiredChecker.assertRecoveryIsNotRequired( fileSystem, pageCache, additionalConfiguration, databaseLayout, new Monitors() ); } catch ( RecoveryRequiredException rre ) { throw new CommandFailed( rre.getMessage() ); } catch ( Exception e ) { throw new CommandFailed( "Failure when checking for recovery state: '%s'." + e.getMessage(), e ); } }
public CoreSnapshot bootstrap( Set<MemberId> members ) throws IOException { if ( recoveryRequiredChecker.isRecoveryRequiredAt( storeDir ) ) { String message = "Cannot bootstrap. Recovery is required. Please ensure that the store being seeded comes from a cleanly shutdown " + "instance of Neo4j or a Neo4j backup"; log.error( message ); throw new IllegalStateException( message ); } StoreFactory factory = new StoreFactory( storeDir, config, new DefaultIdGeneratorFactory( fs ), pageCache, fs, logProvider, EmptyVersionContextSupplier.EMPTY ); NeoStores neoStores = factory.openAllNeoStores( true ); neoStores.close(); CoreSnapshot coreSnapshot = new CoreSnapshot( FIRST_INDEX, FIRST_TERM ); coreSnapshot.add( CoreStateType.ID_ALLOCATION, deriveIdAllocationState( storeDir ) ); coreSnapshot.add( CoreStateType.LOCK_TOKEN, new ReplicatedLockTokenState() ); coreSnapshot.add( CoreStateType.RAFT_CORE_STATE, new RaftCoreState( new MembershipEntry( FIRST_INDEX, members ) ) ); coreSnapshot.add( CoreStateType.SESSION_TRACKER, new GlobalSessionTrackerState() ); appendNullTransactionLogEntryToSetRaftIndexToMinusOne(); return coreSnapshot; }
@Test public void shouldNotThrowIfIntactStore() throws RecoveryRequiredException, IOException { PageCache pageCache = pageCacheRule.getPageCache( fileSystem ); RecoveryRequiredChecker.assertRecoveryIsNotRequired( fileSystem, pageCache, Config.defaults(), databaseLayout, new Monitors() ); }
@Test( expected = RecoveryRequiredException.class ) public void shouldThrowIfBrokenStore() throws IOException, RecoveryRequiredException { try ( FileSystemAbstraction fileSystemAbstraction = createAndCrashWithDefaultConfig() ) { PageCache pageCache = pageCacheRule.getPageCache( fileSystemAbstraction ); RecoveryRequiredChecker.assertRecoveryIsNotRequired( fileSystemAbstraction, pageCache, Config.defaults(), databaseLayout, new Monitors() ); fail(); } }
private static void checkDbState( DatabaseLayout databaseLayout, Config additionalConfiguration ) throws CommandFailed { try ( FileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction(); JobScheduler jobScheduler = createInitialisedScheduler(); PageCache pageCache = ConfigurableStandalonePageCacheFactory.createPageCache( fileSystem, additionalConfiguration, jobScheduler ) ) { RecoveryRequiredChecker.assertRecoveryIsNotRequired( fileSystem, pageCache, additionalConfiguration, databaseLayout, new Monitors() ); } catch ( RecoveryRequiredException rre ) { throw new CommandFailed( rre.getMessage() ); } catch ( Exception e ) { throw new CommandFailed( "Failure when checking for recovery state: '%s'." + e.getMessage(), e ); } }