@Override public boolean test( StoreType type ) { return type.isRecordStore() && stores[type.ordinal()] != null; } };
@SuppressWarnings( "unchecked" ) public <RECORD extends AbstractBaseRecord> RecordStore<RECORD> getRecordStore( StoreType type ) { assert type.isRecordStore(); return (RecordStore<RECORD>) getStore( type ); }
private void deleteStoreFiles( DatabaseLayout databaseLayout, Predicate<StoreType> storesToKeep ) { for ( StoreType type : StoreType.values() ) { if ( type.isRecordStore() && !storesToKeep.test( type ) ) { DatabaseFile databaseFile = type.getDatabaseFile(); databaseLayout.file( databaseFile ).forEach( fileSystem::deleteFile ); databaseLayout.idFile( databaseFile ).ifPresent( fileSystem::deleteFile ); } } }
private long sumStoreFiles( DatabaseLayout databaseLayout ) { long total = 0; for ( StoreType type : StoreType.values() ) { if ( type.isRecordStore() ) { FileSystemAbstraction fileSystem = outsideWorld.fileSystem(); total += databaseLayout.file( type.getDatabaseFile() ).filter( fileSystem::fileExists ).mapToLong( fileSystem::getFileSize ).sum(); } } return total; }
private StoreType[] relevantRecordStores() { return Stream.of( StoreType.values() ) .filter( type -> type.isRecordStore() && type != StoreType.META_DATA ).toArray( StoreType[]::new ); }
private void flushIdFiles( NeoStores neoStores, StoreType[] storeTypes ) { for ( StoreType type : storeTypes ) { if ( type.isRecordStore() ) { RecordStore<AbstractBaseRecord> recordStore = neoStores.getRecordStore( type ); Optional<File> idFile = databaseLayout.idFile( type.getDatabaseFile() ); idFile.ifPresent( f -> idGeneratorFactory.create( f, recordStore.getHighId(), false ) ); } } } }
public RenewableBatchIdSequences( NeoStores stores, int batchSize ) { for ( StoreType type : StoreType.values() ) { if ( type.isRecordStore() ) { RecordStore<AbstractBaseRecord> store = stores.getRecordStore( type ); if ( type.isLimitedIdStore() || batchSize == 1 ) { // This is a token store or otherwise meta-data store, so let's not add batching for it types[type.ordinal()] = store; } else { // This is a normal record store where id batching is beneficial types[type.ordinal()] = new RenewableBatchIdSequence( store, batchSize, store::freeId ); } } } }
private static long[] calculatePageCacheFileSize( DatabaseLayout databaseLayout ) throws IOException { MutableLong pageCacheTotal = new MutableLong(); MutableLong luceneTotal = new MutableLong(); for ( StoreType storeType : StoreType.values() ) { if ( storeType.isRecordStore() ) { long length = databaseLayout.file( storeType.getDatabaseFile() ).mapToLong( File::length ).sum(); pageCacheTotal.add( length ); } } Files.walkFileTree( IndexDirectoryStructure.baseSchemaIndexFolder( databaseLayout.databaseDirectory() ).toPath(), new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile( Path path, BasicFileAttributes attrs ) { File file = path.toFile(); Path name = path.getName( path.getNameCount() - 3 ); boolean isLuceneFile = (path.getNameCount() >= 3 && name.toString().startsWith( "lucene-" )) || (path.getNameCount() >= 4 && path.getName( path.getNameCount() - 4 ).toString().equals( "lucene" )); if ( !FailureStorage.DEFAULT_FAILURE_FILE_NAME.equals( file.getName() ) ) { (isLuceneFile ? luceneTotal : pageCacheTotal).add( file.length() ); } return FileVisitResult.CONTINUE; } } ); return new long[]{pageCacheTotal.longValue(), luceneTotal.longValue()}; }
if ( storeType.isRecordStore() )
private void shouldPrintReferenceLinkAsPartOfErrorMessage( List<String> nodeIds, Iterator<RelationshipDataLine> relationshipDataLines, String message ) { Configuration config = Configuration.COMMAS; try { // WHEN importTool( "--into", dbRule.getDatabaseDirAbsolutePath(), "--nodes", nodeData( true, config, nodeIds, TRUE ).getAbsolutePath(), "--skip-bad-relationships", "false", "--relationships", relationshipData( true, config, relationshipDataLines, TRUE, true ).getAbsolutePath() ); fail( " Should fail during import." ); } catch ( Exception e ) { // EXPECT assertTrue( suppressOutput.getErrorVoice().containsMessage( message ) ); } for ( StoreType storeType : StoreType.values() ) { if ( storeType.isRecordStore() ) { dbRule.databaseLayout().file( storeType.getDatabaseFile() ).forEach( File::delete ); } } }
public void migrate( DatabaseLayout fromDirectoryStructure, RecordFormats fromFormat, DatabaseLayout toDirectoryStructure, RecordFormats toFormat, ProgressReporter progressReporter, StoreType[] types, StoreType... additionalTypesToOpen ) { StoreType[] storesToOpen = ArrayUtil.concat( types, additionalTypesToOpen ); progressReporter.start( storesToOpen.length ); try ( NeoStores fromStores = new StoreFactory( fromDirectoryStructure, config, new DefaultIdGeneratorFactory( fs ), pageCache, fs, fromFormat, NullLogProvider.getInstance(), EmptyVersionContextSupplier.EMPTY ) .openNeoStores( true, storesToOpen ); NeoStores toStores = new StoreFactory( toDirectoryStructure, withPersistedStoreHeadersAsConfigFrom( fromStores, storesToOpen ), new DefaultIdGeneratorFactory( fs ), pageCache, fs, toFormat, NullLogProvider.getInstance(), EmptyVersionContextSupplier.EMPTY ) .openNeoStores( true, storesToOpen ) ) { for ( StoreType type : types ) { // This condition will exclude counts store first and foremost. if ( type.isRecordStore() ) { migrate( fromStores.getRecordStore( type ), toStores.getRecordStore( type ) ); progressReporter.progress( 1 ); } } } }
private static void assertSameStoreContents( EphemeralFileSystemAbstraction fs1, EphemeralFileSystemAbstraction fs2, DatabaseLayout databaseLayout ) { NullLogProvider logProvider = NullLogProvider.getInstance(); VersionContextSupplier contextSupplier = EmptyVersionContextSupplier.EMPTY; try ( ThreadPoolJobScheduler jobScheduler = new ThreadPoolJobScheduler(); PageCache pageCache1 = new ConfiguringPageCacheFactory( fs1, defaults(), PageCacheTracer.NULL, PageCursorTracerSupplier.NULL, NullLog.getInstance(), contextSupplier, jobScheduler ) .getOrCreatePageCache(); PageCache pageCache2 = new ConfiguringPageCacheFactory( fs2, defaults(), PageCacheTracer.NULL, PageCursorTracerSupplier.NULL, NullLog.getInstance(), contextSupplier, jobScheduler ) .getOrCreatePageCache(); NeoStores store1 = new StoreFactory( databaseLayout, defaults(), new DefaultIdGeneratorFactory( fs1 ), pageCache1, fs1, logProvider, contextSupplier ).openAllNeoStores(); NeoStores store2 = new StoreFactory( databaseLayout, defaults(), new DefaultIdGeneratorFactory( fs2 ), pageCache2, fs2, logProvider, contextSupplier ).openAllNeoStores() ) { for ( StoreType storeType : StoreType.values() ) { if ( storeType.isRecordStore() ) { assertSameStoreContents( store1.getRecordStore( storeType ), store2.getRecordStore( storeType ) ); } } } }
@Override public boolean test( StoreType type ) { return type.isRecordStore() && stores[type.ordinal()] != null; } };
@SuppressWarnings( "unchecked" ) public <RECORD extends AbstractBaseRecord> RecordStore<RECORD> getRecordStore( StoreType type ) { assert type.isRecordStore(); return (RecordStore<RECORD>) getStore( type ); }
private void deleteStoreFiles( DatabaseLayout databaseLayout, Predicate<StoreType> storesToKeep ) { for ( StoreType type : StoreType.values() ) { if ( type.isRecordStore() && !storesToKeep.test( type ) ) { DatabaseFile databaseFile = type.getDatabaseFile(); databaseLayout.file( databaseFile ).forEach( fileSystem::deleteFile ); databaseLayout.idFile( databaseFile ).ifPresent( fileSystem::deleteFile ); } } }
private long sumStoreFiles( DatabaseLayout databaseLayout ) { long total = 0; for ( StoreType type : StoreType.values() ) { if ( type.isRecordStore() ) { FileSystemAbstraction fileSystem = outsideWorld.fileSystem(); total += databaseLayout.file( type.getDatabaseFile() ).filter( fileSystem::fileExists ).mapToLong( fileSystem::getFileSize ).sum(); } } return total; }
private void flushIdFiles( NeoStores neoStores, StoreType[] storeTypes ) { for ( StoreType type : storeTypes ) { if ( type.isRecordStore() ) { RecordStore<AbstractBaseRecord> recordStore = neoStores.getRecordStore( type ); Optional<File> idFile = databaseLayout.idFile( type.getDatabaseFile() ); idFile.ifPresent( f -> idGeneratorFactory.create( f, recordStore.getHighId(), false ) ); } } } }
public RenewableBatchIdSequences( NeoStores stores, int batchSize ) { for ( StoreType type : StoreType.values() ) { if ( type.isRecordStore() ) { RecordStore<AbstractBaseRecord> store = stores.getRecordStore( type ); if ( type.isLimitedIdStore() || batchSize == 1 ) { // This is a token store or otherwise meta-data store, so let's not add batching for it types[type.ordinal()] = store; } else { // This is a normal record store where id batching is beneficial types[type.ordinal()] = new RenewableBatchIdSequence( store, batchSize, store::freeId ); } } } }
public void migrate( DatabaseLayout fromDirectoryStructure, RecordFormats fromFormat, DatabaseLayout toDirectoryStructure, RecordFormats toFormat, ProgressReporter progressReporter, StoreType[] types, StoreType... additionalTypesToOpen ) { StoreType[] storesToOpen = ArrayUtil.concat( types, additionalTypesToOpen ); progressReporter.start( storesToOpen.length ); try ( NeoStores fromStores = new StoreFactory( fromDirectoryStructure, config, new DefaultIdGeneratorFactory( fs ), pageCache, fs, fromFormat, NullLogProvider.getInstance(), EmptyVersionContextSupplier.EMPTY ) .openNeoStores( true, storesToOpen ); NeoStores toStores = new StoreFactory( toDirectoryStructure, withPersistedStoreHeadersAsConfigFrom( fromStores, storesToOpen ), new DefaultIdGeneratorFactory( fs ), pageCache, fs, toFormat, NullLogProvider.getInstance(), EmptyVersionContextSupplier.EMPTY ) .openNeoStores( true, storesToOpen ) ) { for ( StoreType type : types ) { // This condition will exclude counts store first and foremost. if ( type.isRecordStore() ) { migrate( fromStores.getRecordStore( type ), toStores.getRecordStore( type ) ); progressReporter.progress( 1 ); } } } }