diff --git a/community/community-it/it-test-support/src/main/java/org/neo4j/test/AdversarialPageCacheGraphDatabaseFactory.java b/community/community-it/it-test-support/src/main/java/org/neo4j/test/AdversarialPageCacheGraphDatabaseFactory.java index bd6c11745b40..91e56b1fed5b 100644 --- a/community/community-it/it-test-support/src/main/java/org/neo4j/test/AdversarialPageCacheGraphDatabaseFactory.java +++ b/community/community-it/it-test-support/src/main/java/org/neo4j/test/AdversarialPageCacheGraphDatabaseFactory.java @@ -59,7 +59,9 @@ protected GraphDatabaseService newEmbeddedDatabase( File dir, Config config, Dep @Override protected PlatformModule createPlatform( File storeDir, Config config, Dependencies dependencies ) { - config.augment( GraphDatabaseSettings.database_path, storeDir.getAbsolutePath() ); + File databasesRoot = storeDir.getParentFile(); + config.augment( GraphDatabaseSettings.active_database, storeDir.getName() ); + config.augment( GraphDatabaseSettings.databases_root_path, databasesRoot.getAbsolutePath() ); return new PlatformModule( storeDir, config, databaseInfo, dependencies ) { @Override @@ -72,8 +74,7 @@ protected FileSystemAbstraction createFileSystemAbstraction() protected PageCache createPageCache( FileSystemAbstraction fileSystem, Config config, LogService logging, Tracers tracers, VersionContextSupplier versionContextSupplier ) { - PageCache pageCache = super.createPageCache( fileSystem, config, logging, tracers, - versionContextSupplier ); + PageCache pageCache = super.createPageCache( fileSystem, config, logging, tracers, versionContextSupplier ); return new AdversarialPageCache( pageCache, adversary ); } }; diff --git a/community/community-it/kernel-it/src/test/java/org/neo4j/kernel/RecoveryIT.java b/community/community-it/kernel-it/src/test/java/org/neo4j/kernel/RecoveryIT.java index 4e24606d2b13..29e047fba7a9 100644 --- a/community/community-it/kernel-it/src/test/java/org/neo4j/kernel/RecoveryIT.java +++ b/community/community-it/kernel-it/src/test/java/org/neo4j/kernel/RecoveryIT.java @@ -257,9 +257,9 @@ public void recoveryShouldFixPartiallyAppliedSchemaIndexUpdates() Command.RelationshipCommand.class ); adversary.disable(); - File storeDir = directory.storeDir(); + File databaseDir = directory.databaseDir(); GraphDatabaseService db = AdversarialPageCacheGraphDatabaseFactory.create( fileSystemRule.get(), adversary ) - .newEmbeddedDatabaseBuilder( storeDir ) + .newEmbeddedDatabaseBuilder( databaseDir ) .newGraphDatabase(); try { diff --git a/community/io/src/main/java/org/neo4j/io/layout/DatabaseLayout.java b/community/io/src/main/java/org/neo4j/io/layout/DatabaseLayout.java index 1dc91f3cf4ca..68aafed64711 100644 --- a/community/io/src/main/java/org/neo4j/io/layout/DatabaseLayout.java +++ b/community/io/src/main/java/org/neo4j/io/layout/DatabaseLayout.java @@ -37,7 +37,7 @@ public static DatabaseLayout of( StoreLayout storeLayout, String databaseName ) public static DatabaseLayout of( File databaseDirectory ) { - return new DatabaseLayout( StoreLayout.of( databaseDirectory.getParentFile() ), databaseDirectory.getName() ); + return of( databaseDirectory.getParentFile(), databaseDirectory.getName() ); } public static DatabaseLayout of( File rootDirectory, String databaseName ) diff --git a/community/io/src/main/java/org/neo4j/io/layout/StoreLayout.java b/community/io/src/main/java/org/neo4j/io/layout/StoreLayout.java index 4283d543b5ff..338da9338383 100644 --- a/community/io/src/main/java/org/neo4j/io/layout/StoreLayout.java +++ b/community/io/src/main/java/org/neo4j/io/layout/StoreLayout.java @@ -20,6 +20,7 @@ package org.neo4j.io.layout; import java.io.File; +import java.util.Objects; public class StoreLayout { @@ -56,6 +57,27 @@ public File storeLockFile() return new File( storeDirectory, STORE_LOCK_FILENAME ); } + @Override + public boolean equals( Object o ) + { + if ( this == o ) + { + return true; + } + if ( o == null || getClass() != o.getClass() ) + { + return false; + } + StoreLayout that = (StoreLayout) o; + return Objects.equals( storeDirectory, that.storeDirectory ); + } + + @Override + public int hashCode() + { + return Objects.hash( storeDirectory ); + } + @Override public String toString() { diff --git a/community/io/src/test/java/org/neo4j/test/rule/TestDirectory.java b/community/io/src/test/java/org/neo4j/test/rule/TestDirectory.java index 0ae5ae53e170..ebfeac79a174 100644 --- a/community/io/src/test/java/org/neo4j/test/rule/TestDirectory.java +++ b/community/io/src/test/java/org/neo4j/test/rule/TestDirectory.java @@ -179,7 +179,7 @@ public DatabaseLayout databaseLayout() public DatabaseLayout databaseLayout( File storeDir ) { DatabaseLayout databaseLayout = StoreLayout.of( storeDir ).databaseLayout( DEFAULT_DATABASE_DIRECTORY ); - createDirectory( defaultDatabaseLayout.databaseDirectory() ); + createDirectory( databaseLayout.databaseDirectory() ); return databaseLayout; } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/files/LogFilesBuilder.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/files/LogFilesBuilder.java index 90cad94201be..7d2528d1547b 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/files/LogFilesBuilder.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/files/LogFilesBuilder.java @@ -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.getStoreLayout().equals( neo4jHome ) && databasePath.equals( logicalLogsLocation ) ) + if ( databaseLayout.getStoreLayout().storeDirectory().equals( neo4jHome ) && databasePath.equals( logicalLogsLocation ) ) { return databaseLayout.databaseDirectory(); } diff --git a/enterprise/backup/src/test/java/org/neo4j/backup/BackupIT.java b/enterprise/backup/src/test/java/org/neo4j/backup/BackupIT.java index 9ace831140a4..642f6859f0a3 100644 --- a/enterprise/backup/src/test/java/org/neo4j/backup/BackupIT.java +++ b/enterprise/backup/src/test/java/org/neo4j/backup/BackupIT.java @@ -294,7 +294,7 @@ public void makeSureStoreIdIsEnforced() // Data should be OK, but store id check should prevent that. try { - backup.incremental( serverStorePath.getPath() ); + backup.incremental( backupDatabasePath.getPath() ); fail( "Shouldn't work" ); } catch ( RuntimeException e ) @@ -306,7 +306,7 @@ public void makeSureStoreIdIsEnforced() // server A, even after a failed attempt from server B DbRepresentation furtherRepresentation = addMoreData( serverStorePath ); server = startServer( serverStorePath, backupPort ); - backup.incremental( serverStorePath.getPath() ); + backup.incremental( backupDatabasePath.getPath() ); assertTrue( "Should be consistent", backup.isConsistent() ); assertEquals( furtherRepresentation, getDbRepresentation() ); shutdownServer( server ); diff --git a/enterprise/backup/src/test/java/org/neo4j/backup/IncrementalBackupIT.java b/enterprise/backup/src/test/java/org/neo4j/backup/IncrementalBackupIT.java index 7f2361a7d421..88bfa011bf6a 100644 --- a/enterprise/backup/src/test/java/org/neo4j/backup/IncrementalBackupIT.java +++ b/enterprise/backup/src/test/java/org/neo4j/backup/IncrementalBackupIT.java @@ -243,6 +243,6 @@ private static void shutdownServer( ServerInterface server ) throws Exception private DbRepresentation getBackupDbRepresentation() { - return DbRepresentation.of( backupStore, Config.defaults( OnlineBackupSettings.online_backup_enabled, Settings.FALSE ) ); + return DbRepresentation.of( backupDatabase, Config.defaults( OnlineBackupSettings.online_backup_enabled, Settings.FALSE ) ); } } diff --git a/enterprise/backup/src/test/java/org/neo4j/backup/impl/BackupStrategyCoordinatorTest.java b/enterprise/backup/src/test/java/org/neo4j/backup/impl/BackupStrategyCoordinatorTest.java index db718a8d1a51..0771ddaae577 100644 --- a/enterprise/backup/src/test/java/org/neo4j/backup/impl/BackupStrategyCoordinatorTest.java +++ b/enterprise/backup/src/test/java/org/neo4j/backup/impl/BackupStrategyCoordinatorTest.java @@ -27,7 +27,6 @@ import org.junit.Test; import org.junit.rules.ExpectedException; -import java.io.File; import java.nio.file.Path; import java.util.Arrays; import java.util.Collections; @@ -40,6 +39,7 @@ import org.neo4j.helpers.progress.ProgressMonitorFactory; import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.logging.LogProvider; +import org.neo4j.test.rule.TestDirectory; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.Matchers.containsString; @@ -55,6 +55,8 @@ public class BackupStrategyCoordinatorTest { @Rule public final ExpectedException expectedException = ExpectedException.none(); + @Rule + public final TestDirectory testDirectory = TestDirectory.testDirectory(); // dependencies private final ConsistencyCheckService consistencyCheckService = mock( ConsistencyCheckService.class ); @@ -78,7 +80,7 @@ public class BackupStrategyCoordinatorTest @Before public void setup() { - when( reportDir.toFile() ).thenReturn( mock( File.class ) ); + when( reportDir.toFile() ).thenReturn( testDirectory.databaseLayout().databaseDirectory() ); when( outsideWorld.fileSystem() ).thenReturn( fileSystem ); when( onlineBackupContext.getRequiredArguments() ).thenReturn( requiredArguments ); when( onlineBackupContext.getResolvedLocationFromName() ).thenReturn( reportDir ); diff --git a/enterprise/causal-clustering/src/test/java/org/neo4j/commandline/dbms/UnbindFromClusterCommandTest.java b/enterprise/causal-clustering/src/test/java/org/neo4j/commandline/dbms/UnbindFromClusterCommandTest.java index dd4dcf50df09..6d519d495b1e 100644 --- a/enterprise/causal-clustering/src/test/java/org/neo4j/commandline/dbms/UnbindFromClusterCommandTest.java +++ b/enterprise/causal-clustering/src/test/java/org/neo4j/commandline/dbms/UnbindFromClusterCommandTest.java @@ -48,7 +48,6 @@ import org.neo4j.io.fs.DefaultFileSystemAbstraction; import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.StoreLayout; import org.neo4j.test.rule.TestDirectory; import org.neo4j.test.rule.fs.EphemeralFileSystemRule; @@ -187,11 +186,10 @@ public void shouldPrintUsage() throws Throwable } } - private Path createUnlockedFakeDbDir( Path homeDir ) throws IOException + private void createUnlockedFakeDbDir( Path homeDir ) throws IOException { Path fakeDbDir = createFakeDbDir( homeDir ); Files.createFile( DatabaseLayout.of( fakeDbDir.toFile() ).getStoreLayout().storeLockFile().toPath() ); - return fakeDbDir; } private FileLock createLockedFakeDbDir( Path homeDir ) throws IOException @@ -207,14 +205,14 @@ private Path createFakeDbDir( Path homeDir ) throws IOException return graphDb; } - private FileLock createLockedStoreLockFileIn( Path storeDir ) throws IOException + private FileLock createLockedStoreLockFileIn( Path databaseDir ) throws IOException { - Path storeLockFile = StoreLayout.of( storeDir.toFile() ).storeLockFile().toPath(); + Path storeLockFile = Files.createFile( DatabaseLayout.of( databaseDir.toFile() ).getStoreLayout().storeLockFile().toPath() ); channel = FileChannel.open( storeLockFile, READ, WRITE ); return channel.lock( 0, Long.MAX_VALUE, true ); } - private String[] databaseNameParameter( String databaseName ) + private static String[] databaseNameParameter( String databaseName ) { return new String[]{"--database=" + databaseName}; } diff --git a/enterprise/cypher/acceptance-spec-suite/pom.xml b/enterprise/cypher/acceptance-spec-suite/pom.xml index 8d98f0506707..e4e0659bfcf0 100644 --- a/enterprise/cypher/acceptance-spec-suite/pom.xml +++ b/enterprise/cypher/acceptance-spec-suite/pom.xml @@ -232,6 +232,10 @@ test + + commons-codec + commons-codec + diff --git a/enterprise/cypher/acceptance-spec-suite/src/test/scala/org/neo4j/internal/cypher/acceptance/IndexPersistenceAcceptanceTest.scala b/enterprise/cypher/acceptance-spec-suite/src/test/scala/org/neo4j/internal/cypher/acceptance/IndexPersistenceAcceptanceTest.scala index f0edac7f2f4d..5dd3de5daeed 100644 --- a/enterprise/cypher/acceptance-spec-suite/src/test/scala/org/neo4j/internal/cypher/acceptance/IndexPersistenceAcceptanceTest.scala +++ b/enterprise/cypher/acceptance-spec-suite/src/test/scala/org/neo4j/internal/cypher/acceptance/IndexPersistenceAcceptanceTest.scala @@ -28,15 +28,15 @@ import java.time.ZoneOffset import org.neo4j.cypher.internal.javacompat.GraphDatabaseCypherService import org.neo4j.graphdb.config.Setting import org.neo4j.io.fs.FileUtils -import org.neo4j.kernel.configuration.Settings import org.neo4j.kernel.impl.index.schema.config.SpatialIndexSettings +import org.neo4j.test.rule.TestDirectory import org.neo4j.values.storable._ -import scala.collection.{Map, immutable} +import scala.collection.Map class IndexPersistenceAcceptanceTest extends IndexingTestSupport { - private var dbDir = new File("test") + private var dbDir = TestDirectory.testDirectory(getClass).prepareDirectoryForTest("test") override val cypherComparisonSupport = false diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/impl/ha/ClusterManager.java b/enterprise/ha/src/test/java/org/neo4j/kernel/impl/ha/ClusterManager.java index 000b1270eff3..d09e10c13779 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/impl/ha/ClusterManager.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/impl/ha/ClusterManager.java @@ -55,6 +55,7 @@ import org.neo4j.cluster.member.ClusterMemberListener; import org.neo4j.cluster.protocol.election.NotElectableElectionCredentialsProvider; import org.neo4j.consistency.store.StoreAssertions; +import org.neo4j.dbms.database.DatabaseManager; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.TransactionFailureException; import org.neo4j.graphdb.config.Setting; @@ -66,6 +67,7 @@ import org.neo4j.helpers.collection.Iterables; import org.neo4j.helpers.collection.MapUtil; import org.neo4j.io.layout.DatabaseLayout; +import org.neo4j.io.layout.StoreLayout; import org.neo4j.io.pagecache.IOLimiter; import org.neo4j.kernel.configuration.BoltConnector; import org.neo4j.kernel.configuration.Config; @@ -1157,14 +1159,15 @@ private HighlyAvailableGraphDatabase startMemberNow( InstanceId serverId ) URI clusterUri = clusterUri( member ); int clusterPort = clusterUri.getPort(); int haPort = PortAuthority.allocatePort(); - File storeDir = new File( parent, "server" + serverId ); + StoreLayout storeLayout = StoreLayout.of( new File( parent, "server" + serverId ) ); + DatabaseLayout databaseLayout = storeLayout.databaseLayout( DatabaseManager.DEFAULT_DATABASE_NAME ); if ( storeDirInitializer != null ) { - storeDirInitializer.initializeStoreDir( serverId.toIntegerIndex(), storeDir ); + storeDirInitializer.initializeStoreDir( serverId.toIntegerIndex(), databaseLayout.databaseDirectory() ); } Monitors monitors = getDatabaseMonitors(); - GraphDatabaseBuilder builder = dbFactory.setMonitors( monitors ).newEmbeddedDatabaseBuilder( storeDir.getAbsoluteFile() ); + GraphDatabaseBuilder builder = dbFactory.setMonitors( monitors ).newEmbeddedDatabaseBuilder( databaseLayout.databaseDirectory() ); builder.setConfig( ClusterSettings.cluster_name, name ); builder.setConfig( ClusterSettings.initial_hosts, initialHosts ); builder.setConfig( ClusterSettings.server_id, serverId + "" ); diff --git a/enterprise/kernel/src/test/java/org/neo4j/test/TestEnterpriseGraphDatabaseFactory.java b/enterprise/kernel/src/test/java/org/neo4j/test/TestEnterpriseGraphDatabaseFactory.java index 405249a31f34..95fbb3d3b9d4 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/test/TestEnterpriseGraphDatabaseFactory.java +++ b/enterprise/kernel/src/test/java/org/neo4j/test/TestEnterpriseGraphDatabaseFactory.java @@ -38,7 +38,6 @@ import org.neo4j.kernel.impl.factory.Edition; import org.neo4j.kernel.impl.logging.LogService; import org.neo4j.kernel.impl.logging.SimpleLogService; -import org.neo4j.logging.AssertableLogProvider; import org.neo4j.logging.LogProvider; /** @@ -65,7 +64,10 @@ protected GraphDatabaseBuilder.DatabaseCreator createDatabaseCreator( File store @Override public GraphDatabaseService newDatabase( Config config ) { + File databasesRoot = storeDir.getParentFile(); config.augment( GraphDatabaseSettings.ephemeral, Settings.FALSE ); + config.augment( GraphDatabaseSettings.active_database, storeDir.getName() ); + config.augment( GraphDatabaseSettings.databases_root_path, databasesRoot.getAbsolutePath() ); return new GraphDatabaseFacadeFactory( DatabaseInfo.ENTERPRISE, EnterpriseEditionModule::new ) { @Override @@ -88,7 +90,7 @@ protected LogService createLogService( LogProvider userLogProvider ) } }; } - }.newFacade( storeDir, config, GraphDatabaseDependencies.newDependencies( state.databaseDependencies() ) ); + }.newFacade( databasesRoot, config, GraphDatabaseDependencies.newDependencies( state.databaseDependencies() ) ); } }; } diff --git a/enterprise/neo4j-enterprise/src/test/java/org/neo4j/CompositeConstraintIT.java b/enterprise/neo4j-enterprise/src/test/java/org/neo4j/CompositeConstraintIT.java index 52edeb2e1131..ad5796b5146b 100644 --- a/enterprise/neo4j-enterprise/src/test/java/org/neo4j/CompositeConstraintIT.java +++ b/enterprise/neo4j-enterprise/src/test/java/org/neo4j/CompositeConstraintIT.java @@ -86,7 +86,7 @@ public void compositeNodeKeyConstraintUpdate() throws Exception } database.shutdown(); - ConsistencyCheckService.Result consistencyCheckResult = checkDbConsistency( testDirectory.databaseDir() ); + ConsistencyCheckService.Result consistencyCheckResult = checkDbConsistency( testDirectory.storeDir() ); assertTrue( "Database is consistent", consistencyCheckResult.isSuccessful() ); } diff --git a/integrationtests/src/test/java/org/neo4j/consistency/HalfCreatedConstraintIT.java b/integrationtests/src/test/java/org/neo4j/consistency/HalfCreatedConstraintIT.java index 19a4f4e59377..381337ecd934 100644 --- a/integrationtests/src/test/java/org/neo4j/consistency/HalfCreatedConstraintIT.java +++ b/integrationtests/src/test/java/org/neo4j/consistency/HalfCreatedConstraintIT.java @@ -56,11 +56,11 @@ public class HalfCreatedConstraintIT @Test public void uniqueIndexWithoutOwningConstraintIsIgnoredDuringCheck() throws ConsistencyCheckTool.ToolFailureException, IOException { - File storeDir = testDirectory.storeDir(); + File databaseDir = testDirectory.databaseDir(); Label marker = Label.label( "MARKER" ); String property = "property"; - GraphDatabaseService database = new EnterpriseGraphDatabaseFactory().newEmbeddedDatabase( storeDir ); + GraphDatabaseService database = new EnterpriseGraphDatabaseFactory().newEmbeddedDatabase( databaseDir ); try { createNodes( marker, property, database ); @@ -72,7 +72,7 @@ public void uniqueIndexWithoutOwningConstraintIsIgnoredDuringCheck() throws Cons database.shutdown(); } - ConsistencyCheckService.Result checkResult = ConsistencyCheckTool.runConsistencyCheckTool( new String[]{testDirectory.databaseDir().getAbsolutePath()}, + ConsistencyCheckService.Result checkResult = ConsistencyCheckTool.runConsistencyCheckTool( new String[]{databaseDir.getAbsolutePath()}, emptyPrintStream(), emptyPrintStream() ); assertTrue( String.join( System.lineSeparator(), Files.readAllLines( checkResult.reportFile().toPath() ) ), checkResult.isSuccessful() ); }