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(); } } }
@Test public void shouldNotWantToRecoverIntactStore() throws Exception { PageCache pageCache = pageCacheRule.getPageCache( fileSystem ); RecoveryRequiredChecker recoverer = getRecoveryCheckerWithDefaultConfig( fileSystem, pageCache ); assertThat( recoverer.isRecoveryRequiredAt( databaseLayout ), is( false ) ); }
@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 ) ); } }
@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 ) ); } }
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 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 ) ); } }
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(); } } }
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; }