Skip to content

Commit

Permalink
Refactor store and database layouts and their relation
Browse files Browse the repository at this point in the history
  • Loading branch information
MishaDemianenko committed Aug 21, 2018
1 parent 8e1c273 commit c1a74b8
Show file tree
Hide file tree
Showing 17 changed files with 52 additions and 47 deletions.
Expand Up @@ -195,7 +195,7 @@ public ImpermanentPlatformModule( File storeDir, Config config, DatabaseInfo dat
@Override
protected StoreLocker createStoreLocker()
{
return new StoreLocker( fileSystem, directoryStructure.rootDirectory() );
return new StoreLocker( fileSystem, storeLayout.storeDirectory() );
}

@Override
Expand Down
Expand Up @@ -350,7 +350,7 @@ protected FileSystemAbstraction createNewFileSystem()
@Override
protected StoreLocker createStoreLocker()
{
return new StoreLocker( fileSystem, directoryStructure.rootDirectory() );
return new StoreLocker( fileSystem, storeLayout.storeDirectory() );
}
}
}
Expand Down
32 changes: 19 additions & 13 deletions community/io/src/main/java/org/neo4j/io/layout/DatabaseLayout.java
Expand Up @@ -27,33 +27,39 @@ public class DatabaseLayout
{
private static final File[] EMPTY_FILES_ARRAY = new File[0];
private final File databaseDirectory;
private final File databasesDirectory;
private final StoreLayout storeLayout;
private final String databaseName;

public static DatabaseLayout of( StoreLayout storeLayout, String databaseName )
{
return new DatabaseLayout( storeLayout, databaseName );
}

public static DatabaseLayout of( File databaseDirectory )
{
return new DatabaseLayout( databaseDirectory );
return new DatabaseLayout( new StoreLayout( databaseDirectory.getParentFile() ), databaseDirectory.getName() );
}

public static DatabaseLayout of( File rootDirectory, String databaseName )
{
return new DatabaseLayout( rootDirectory, databaseName );
return new DatabaseLayout( new StoreLayout( rootDirectory ), databaseName );
}

private DatabaseLayout( File databaseDirectory )
private DatabaseLayout( StoreLayout storeLayout, String databaseName )
{
this.databaseDirectory = databaseDirectory;
this.databasesDirectory = databaseDirectory.getParentFile();
this.storeLayout = storeLayout;
this.databaseDirectory = new File( storeLayout.storeDirectory(), databaseName );
this.databaseName = databaseName;
}

private DatabaseLayout( File rootDirectory, String databaseName )
public String getDatabaseName()
{
this.databasesDirectory = rootDirectory;
this.databaseDirectory = new File( rootDirectory, databaseName );
return databaseName;
}

public File getDatabasesDirectory()
public File getStoreDirectory()
{
return databasesDirectory;
return storeLayout.storeDirectory();
}

public File databaseDirectory()
Expand Down Expand Up @@ -95,12 +101,12 @@ public boolean equals( Object o )
return false;
}
DatabaseLayout that = (DatabaseLayout) o;
return Objects.equals( databaseDirectory, that.databaseDirectory ) && Objects.equals( databasesDirectory, that.databasesDirectory );
return Objects.equals( databaseDirectory, that.databaseDirectory ) && Objects.equals( storeLayout, that.storeLayout );
}

@Override
public int hashCode()
{
return Objects.hash( databaseDirectory, databasesDirectory );
return Objects.hash( databaseDirectory, storeLayout );
}
}
13 changes: 6 additions & 7 deletions community/io/src/main/java/org/neo4j/io/layout/StoreLayout.java
Expand Up @@ -23,25 +23,24 @@

public class StoreLayout
{
private final File rootDirectory;
private final File storeDirectory;

public StoreLayout( File rootStoreDirectory )
{
this.rootDirectory = rootStoreDirectory;
this.storeDirectory = rootStoreDirectory;
}

/**
* Databases root directory where all databases are located.
* @return all databases root directory
*/
public File rootDirectory()
public File storeDirectory()
{
return rootDirectory;
return storeDirectory;
}

//TODO:rename
public DatabaseLayout databaseDirectory( String databaseName )
public DatabaseLayout databaseLayout( String databaseName )
{
return DatabaseLayout.of( rootDirectory, databaseName );
return DatabaseLayout.of( storeDirectory, databaseName );
}
}
Expand Up @@ -173,21 +173,21 @@ public DatabaseLayout databaseLayout()

public DatabaseLayout databaseLayout( File storeDir )
{
DatabaseLayout databaseLayout = new StoreLayout( storeDir ).databaseDirectory( DEFAULT_DATABASE_DIRECTORY );
DatabaseLayout databaseLayout = new StoreLayout( storeDir ).databaseLayout( DEFAULT_DATABASE_DIRECTORY );
createDirectory( defaultDatabaseLayout.databaseDirectory() );
return databaseLayout;
}

public DatabaseLayout databaseLayout( String name )
{
DatabaseLayout databaseLayout = storeLayout.databaseDirectory( name );
DatabaseLayout databaseLayout = storeLayout.databaseLayout( name );
createDirectory( databaseLayout.databaseDirectory() );
return databaseLayout;
}

public File storeDir()
{
return storeLayout.rootDirectory();
return storeLayout.storeDirectory();
}

public File storeDir( String storeDirName )
Expand Down Expand Up @@ -254,7 +254,7 @@ public void prepareDirectory( Class<?> testClass, String test ) throws IOExcepti
}
testDirectory = prepareDirectoryForTest( test );
storeLayout = new StoreLayout( testDirectory );
defaultDatabaseLayout = storeLayout.databaseDirectory( DEFAULT_DATABASE_DIRECTORY );
defaultDatabaseLayout = storeLayout.databaseLayout( DEFAULT_DATABASE_DIRECTORY );
}

public File prepareDirectoryForTest( String test ) throws IOException
Expand Down
Expand Up @@ -95,7 +95,7 @@ public void unregistered( NeoStoreDataSource ds )

private File resolvePath( NeoStoreDataSource ds )
{
File databasesDirectory = ds.getDatabaseLayout().getDatabasesDirectory();
File databasesDirectory = ds.getDatabaseLayout().getStoreDirectory();
try
{
return databasesDirectory.getCanonicalFile().getAbsoluteFile();
Expand Down
Expand Up @@ -192,7 +192,7 @@ private File getLogsDirectory()
File neo4jHome = config.get( GraphDatabaseSettings.neo4j_home );
File databasePath = config.get( database_path );
File logicalLogsLocation = config.get( GraphDatabaseSettings.logical_logs_location );
if ( databaseLayout.getDatabasesDirectory().equals( neo4jHome ) && databasePath.equals( logicalLogsLocation ) )
if ( databaseLayout.getStoreDirectory().equals( neo4jHome ) && databasePath.equals( logicalLogsLocation ) )
{
return databaseLayout.databaseDirectory();
}
Expand Down
Expand Up @@ -205,7 +205,7 @@ public GraphDatabaseFacade initFacade( File storeDir, Config config, final Depen
catch ( final Throwable throwable )
{
error = new RuntimeException( "Error starting " + getClass().getName() + ", " +
platform.directoryStructure.rootDirectory(), throwable );
platform.storeLayout.storeDirectory(), throwable );
}
finally
{
Expand Down
Expand Up @@ -112,7 +112,7 @@ public CommunityEditionModule( PlatformModule platformModule )
new DelegatingTokenHolder( createLabelIdCreator( config, dataSourceManager ), TokenHolder.TYPE_LABEL ),
new DelegatingTokenHolder( createRelationshipTypeCreator( config, dataSourceManager ), TokenHolder.TYPE_RELATIONSHIP_TYPE ) );

File kernelContextDirectory = platformModule.directoryStructure.rootDirectory();
File kernelContextDirectory = platformModule.storeLayout.storeDirectory();
dependencies.satisfyDependency( createKernelData( fileSystem, pageCache, kernelContextDirectory, config, life, dataSourceManager ) );

commitProcessFactory = new CommunityCommitProcessFactory();
Expand Down
Expand Up @@ -117,7 +117,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext
this.databaseName = databaseName;
this.config = platformModule.config;
this.idGeneratorFactory = editionModule.idGeneratorFactory;
this.directoryStructure = platformModule.directoryStructure.databaseDirectory( databaseName );
this.directoryStructure = platformModule.storeLayout.databaseLayout( databaseName );
this.logService = platformModule.logging;
this.scheduler = platformModule.jobScheduler;
this.globalDependencies = platformModule.dependencies;
Expand Down
Expand Up @@ -22,12 +22,12 @@
import java.io.File;
import java.io.IOException;

import org.neo4j.internal.diagnostics.DiagnosticsManager;
import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.graphdb.security.URLAccessRule;
import org.neo4j.index.internal.gbptree.GroupingRecoveryCleanupWorkCollector;
import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector;
import org.neo4j.internal.diagnostics.DiagnosticsManager;
import org.neo4j.io.fs.DefaultFileSystemAbstraction;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.fs.FileSystemLifecycleAdapter;
Expand Down Expand Up @@ -100,7 +100,7 @@ public class PlatformModule

public final LifeSupport life;

public final StoreLayout directoryStructure;
public final StoreLayout storeLayout;

public final DatabaseInfo databaseInfo;

Expand Down Expand Up @@ -157,7 +157,7 @@ public PlatformModule( File providedStoreDir, Config config, DatabaseInfo databa
config.augmentDefaults( GraphDatabaseSettings.neo4j_home, providedStoreDir.getAbsolutePath() );
this.config = dependencies.satisfyDependency( config );

this.directoryStructure = new StoreLayout( providedStoreDir.getAbsoluteFile() );
this.storeLayout = new StoreLayout( providedStoreDir.getAbsoluteFile() );

fileSystem = dependencies.satisfyDependency( createFileSystemAbstraction() );
life.add( new FileSystemLifecycleAdapter( fileSystem ) );
Expand Down Expand Up @@ -218,8 +218,8 @@ public PlatformModule( File providedStoreDir, Config config, DatabaseInfo databa
kernelExtensionFactories = externalDependencies.kernelExtensions();
engineProviders = externalDependencies.executionEngines();
globalKernelExtensions = dependencies.satisfyDependency(
new GlobalKernelExtensions( new SimpleKernelContext( directoryStructure.rootDirectory(), databaseInfo, dependencies ), kernelExtensionFactories,
dependencies, UnsatisfiedDependencyStrategies.fail() ) );
new GlobalKernelExtensions( new SimpleKernelContext( storeLayout.storeDirectory(), databaseInfo, dependencies ),
kernelExtensionFactories, dependencies, UnsatisfiedDependencyStrategies.fail() ) );

urlAccessRule = dependencies.satisfyDependency( URLAccessRules.combined( externalDependencies.urlAccessRules() ) );

Expand All @@ -245,7 +245,7 @@ protected AvailabilityGuard createAvailabilityGuard()

protected StoreLocker createStoreLocker()
{
return new GlobalStoreLocker( fileSystem, directoryStructure.rootDirectory() );
return new GlobalStoreLocker( fileSystem, storeLayout.storeDirectory() );
}

protected SystemNanoClock createClock()
Expand Down
Expand Up @@ -227,7 +227,7 @@ private BackupOutcome incrementalBackup( FileSystemAbstraction fileSystem, Strin
{
targetDb.shutdown();
// as soon as recovery will be extracted we will not gonna need this
File lockFile = new File( targetLayout.getDatabasesDirectory().getParentFile(), StoreLocker.STORE_LOCK_FILENAME );
File lockFile = new File( targetLayout.getStoreDirectory(), StoreLocker.STORE_LOCK_FILENAME );
if ( lockFile.exists() )
{
FileUtils.deleteFile( lockFile );
Expand Down
Expand Up @@ -361,7 +361,7 @@ public void onlyTheLatestTransactionIsKeptAfterIncrementalBackup() throws Except

// then there has been a rotation
BackupTransactionLogFilesHelper backupTransactionLogFilesHelper = new BackupTransactionLogFilesHelper();
LogFiles logFiles = BackupTransactionLogFilesHelper.readLogFiles( new StoreLayout( backupDir ).databaseDirectory( backupName ) );
LogFiles logFiles = BackupTransactionLogFilesHelper.readLogFiles( new StoreLayout( backupDir ).databaseLayout( backupName ) );
long highestTxIdInLogFiles = logFiles.getHighestLogVersion();
assertEquals( 2, highestTxIdInLogFiles );

Expand Down
Expand Up @@ -75,7 +75,7 @@ public synchronized void recoverCopiedStore( DatabaseLayout databaseLayout ) thr
GraphDatabaseService graphDatabaseService = newTempDatabase( databaseLayout.databaseDirectory() );
graphDatabaseService.shutdown();
// as soon as recovery will be extracted we will not gonna need this
File lockFile = new File( databaseLayout.getDatabasesDirectory(), StoreLocker.STORE_LOCK_FILENAME );
File lockFile = new File( databaseLayout.getStoreDirectory(), StoreLocker.STORE_LOCK_FILENAME );
if ( lockFile.exists() )
{
FileUtils.deleteFile( lockFile );
Expand Down
Expand Up @@ -206,7 +206,7 @@ public EnterpriseCoreEditionModule( final PlatformModule platformModule,
config = platformModule.config;
final LogService logging = platformModule.logging;
final FileSystemAbstraction fileSystem = platformModule.fileSystem;
final DatabaseLayout databaseLayout = platformModule.directoryStructure.databaseDirectory( config.get( GraphDatabaseSettings.active_database ) );
final DatabaseLayout databaseLayout = platformModule.storeLayout.databaseLayout( config.get( GraphDatabaseSettings.active_database ) );
final LifeSupport life = platformModule.life;

CoreMonitor.register( logging.getInternalLogProvider(), logging.getUserLogProvider(), platformModule.monitors );
Expand Down Expand Up @@ -420,7 +420,7 @@ private void editionInvariants( PlatformModule platformModule, Dependencies depe
statementLocksFactory = new StatementLocksFactorySelector( lockManager, config, logging ).select();

dependencies.satisfyDependency(
createKernelData( platformModule.fileSystem, platformModule.pageCache, platformModule.directoryStructure.rootDirectory(),
createKernelData( platformModule.fileSystem, platformModule.pageCache, platformModule.storeLayout.storeDirectory(),
config, platformModule.dataSourceManager, life ) );

ioLimiter = new ConfigurableIOLimiter( platformModule.config );
Expand Down
Expand Up @@ -164,7 +164,7 @@ public EnterpriseReadReplicaEditionModule( final PlatformModule platformModule,
Config config = platformModule.config;
FileSystemAbstraction fileSystem = platformModule.fileSystem;
PageCache pageCache = platformModule.pageCache;
final DatabaseLayout databaseLayout = platformModule.directoryStructure.databaseDirectory( config.get( GraphDatabaseSettings.active_database ) );
final DatabaseLayout databaseLayout = platformModule.storeLayout.databaseLayout( config.get( GraphDatabaseSettings.active_database ) );

LifeSupport life = platformModule.life;

Expand Down Expand Up @@ -192,7 +192,7 @@ public EnterpriseReadReplicaEditionModule( final PlatformModule platformModule,
new DelegatingTokenHolder( new ReadOnlyTokenCreator(), TokenHolder.TYPE_LABEL ),
new DelegatingTokenHolder( new ReadOnlyTokenCreator(), TokenHolder.TYPE_RELATIONSHIP_TYPE ) );

File contextDirectory = platformModule.directoryStructure.rootDirectory();
File contextDirectory = platformModule.storeLayout.storeDirectory();
life.add( dependencies.satisfyDependency( new KernelData( fileSystem, pageCache, contextDirectory, config, platformModule.dataSourceManager ) ) );

headerInformationFactory = TransactionHeaderInformationFactory.DEFAULT;
Expand Down
Expand Up @@ -56,7 +56,6 @@
import org.neo4j.com.storecopy.StoreUtil;
import org.neo4j.com.storecopy.TransactionCommittingResponseUnpacker;
import org.neo4j.dbms.database.DatabaseManager;
import org.neo4j.internal.diagnostics.DiagnosticsManager;
import org.neo4j.function.Factory;
import org.neo4j.function.Predicates;
import org.neo4j.graphdb.DependencyResolver;
Expand All @@ -66,6 +65,7 @@
import org.neo4j.graphdb.factory.module.PlatformModule;
import org.neo4j.helpers.HostnamePort;
import org.neo4j.helpers.NamedThreadFactory;
import org.neo4j.internal.diagnostics.DiagnosticsManager;
import org.neo4j.internal.kernel.api.Kernel;
import org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException;
import org.neo4j.internal.kernel.api.exceptions.KernelException;
Expand Down Expand Up @@ -229,7 +229,7 @@ public HighlyAvailableEditionModule( final PlatformModule platformModule )
// Set Netty logger
InternalLoggerFactory.setDefaultFactory( new NettyLoggerFactory( logging.getInternalLogProvider() ) );

DatabaseLayout databaseLayout = platformModule.directoryStructure.databaseDirectory( DatabaseManager.DEFAULT_DATABASE_NAME );
DatabaseLayout databaseLayout = platformModule.storeLayout.databaseLayout( DatabaseManager.DEFAULT_DATABASE_NAME );
life.add( new BranchedDataMigrator( databaseLayout.databaseDirectory() ) );
DelegateInvocationHandler<Master> masterDelegateInvocationHandler =
new DelegateInvocationHandler<>( Master.class );
Expand Down Expand Up @@ -518,7 +518,7 @@ public void elected( String role, InstanceId instanceId, URI electedMember )

dependencies.satisfyDependency(
createKernelData( config, platformModule.dataSourceManager, members, fs, platformModule.pageCache,
platformModule.directoryStructure.rootDirectory(), lastUpdateTime, lastTxIdGetter, life ) );
platformModule.storeLayout.storeDirectory(), lastUpdateTime, lastTxIdGetter, life ) );

commitProcessFactory = createCommitProcessFactory( dependencies, logging, monitors, config, paxosLife,
clusterClient, members, platformModule.jobScheduler, master, requestContextFactory,
Expand Down

0 comments on commit c1a74b8

Please sign in to comment.