From a20fa397c6c603248bde3f80f725249a730d1776 Mon Sep 17 00:00:00 2001 From: Ben Butler-Cole Date: Tue, 5 Apr 2016 08:08:19 +0100 Subject: [PATCH] Resolve configured directories relative to a specific location Previously we resolved relative to the working directory which made it hard to manipulate this in tests and may have been unexpected for embedded users. Now we use a specific location, provided by the internal unsupported.dbms.directories.neo4j_home setting. neo4j_home is set to the working directory for server, but the database directory when running embedded or in the desktop application. --- .../org/neo4j/bolt/BoltKernelExtension.java | 5 +- .../DatabaseManagementSystemSettings.java | 15 +++-- .../DatabaseManagementSystemSettingsTest.java | 5 +- .../factory/GraphDatabaseSettings.java | 16 +++-- .../neo4j/kernel/configuration/Settings.java | 66 +++++++++++++++++-- .../kernel/impl/factory/PlatformModule.java | 7 ++ .../kernel/configuration/SettingsTest.java | 49 ++++++++++---- .../docs/SettingsDocumenterTest.java | 7 +- .../neo4j/server/CommunityBootstrapper.java | 4 +- .../org/neo4j/server/ServerBootstrapper.java | 4 +- .../neo4j/server/ServerCommandLineArgs.java | 3 +- .../server/configuration/ConfigLoader.java | 22 +++++-- .../server/configuration/ServerSettings.java | 6 +- .../server/ServerCommandLineArgsTest.java | 4 +- .../org/neo4j/metrics/MetricsSettings.java | 3 +- .../neo4j/metrics/output/CsvOutputTest.java | 38 ++++------- .../enterprise/EnterpriseBootstrapper.java | 6 +- .../desktop/runtime/DesktopConfigurator.java | 6 +- .../desktop/runtime/DatabaseActionsTest.java | 4 +- 19 files changed, 179 insertions(+), 91 deletions(-) diff --git a/community/bolt/src/main/java/org/neo4j/bolt/BoltKernelExtension.java b/community/bolt/src/main/java/org/neo4j/bolt/BoltKernelExtension.java index a7bb0b1a00304..638dd9e91baf3 100644 --- a/community/bolt/src/main/java/org/neo4j/bolt/BoltKernelExtension.java +++ b/community/bolt/src/main/java/org/neo4j/bolt/BoltKernelExtension.java @@ -86,9 +86,8 @@ public class BoltKernelExtension extends KernelExtensionFactory certificates_directory = setting( - "dbms.directories.certificates", PATH, "certificates" - ); + public static Setting certificates_directory = + pathSetting( "dbms.directories.certificates", "certificates" ); @Internal @Description( "Path to the X.509 public certificate to be used by Neo4j for TLS connections" ) diff --git a/community/dbms/src/main/java/org/neo4j/dbms/DatabaseManagementSystemSettings.java b/community/dbms/src/main/java/org/neo4j/dbms/DatabaseManagementSystemSettings.java index 2d87e109db04d..fb083c47cfc8a 100644 --- a/community/dbms/src/main/java/org/neo4j/dbms/DatabaseManagementSystemSettings.java +++ b/community/dbms/src/main/java/org/neo4j/dbms/DatabaseManagementSystemSettings.java @@ -24,20 +24,25 @@ import org.neo4j.graphdb.config.Setting; import org.neo4j.graphdb.factory.Description; import org.neo4j.kernel.configuration.Internal; -import org.neo4j.kernel.configuration.Settings; + +import static org.neo4j.kernel.configuration.Settings.PATH; +import static org.neo4j.kernel.configuration.Settings.STRING; +import static org.neo4j.kernel.configuration.Settings.derivedSetting; +import static org.neo4j.kernel.configuration.Settings.pathSetting; +import static org.neo4j.kernel.configuration.Settings.setting; public interface DatabaseManagementSystemSettings { @Description("Name of the database to load") - Setting active_database = Settings.setting( "dbms.active_database", Settings.STRING, "graph.db" ); + Setting active_database = setting( "dbms.active_database", STRING, "graph.db" ); @Description("Path of the data directory. You must not configure more than one Neo4j installation to use the " + "same data directory.") - Setting data_directory = Settings.setting( "dbms.directories.data", Settings.PATH, "data" ); + Setting data_directory = pathSetting( "dbms.directories.data", "data" ); @Internal - Setting database_path = Settings.derivedSetting( "unsupported.dbms.directories.database", + Setting database_path = derivedSetting( "unsupported.dbms.directories.database", data_directory, active_database, ( data, current ) -> new File( new File( data, "databases" ), current ), - Settings.PATH ); + PATH ); } diff --git a/community/dbms/src/test/java/org/neo4j/dbms/DatabaseManagementSystemSettingsTest.java b/community/dbms/src/test/java/org/neo4j/dbms/DatabaseManagementSystemSettingsTest.java index dfe03c3071c70..7247ee1400bec 100644 --- a/community/dbms/src/test/java/org/neo4j/dbms/DatabaseManagementSystemSettingsTest.java +++ b/community/dbms/src/test/java/org/neo4j/dbms/DatabaseManagementSystemSettingsTest.java @@ -32,12 +32,11 @@ public class DatabaseManagementSystemSettingsTest { - @Test public void shouldPutDatabaseDirectoriesIntoDataDatabases() { Config config = new Config( stringMap( DatabaseManagementSystemSettings.data_directory.name(), "the-data-directory" ) ); assertThat( config.get( DatabaseManagementSystemSettings.database_path ), - equalTo( new File( System.getProperty("user.dir") + "/the-data-directory/databases/graph.db" ) ) ); + equalTo( new File( "the-data-directory/databases/graph.db" ) ) ); } -} \ No newline at end of file +} diff --git a/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseSettings.java b/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseSettings.java index eede69a470e43..61118715545d0 100644 --- a/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseSettings.java +++ b/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseSettings.java @@ -63,6 +63,7 @@ import static org.neo4j.kernel.configuration.Settings.max; import static org.neo4j.kernel.configuration.Settings.min; import static org.neo4j.kernel.configuration.Settings.options; +import static org.neo4j.kernel.configuration.Settings.pathSetting; import static org.neo4j.kernel.configuration.Settings.setting; /** @@ -74,6 +75,12 @@ public abstract class GraphDatabaseSettings @Migrator private static final ConfigurationMigrator migrator = new GraphDatabaseConfigurationMigrator(); + @Internal + @Description("Root relative to which directory settings are resolved. This is set in code and should never be " + + "configured explicitly.") + public static final Setting neo4j_home = + setting( "unsupported.dbms.directories.neo4j_home", PATH, NO_DEFAULT ); + @Title("Read only database") @Description("Only allow read operations from this Neo4j instance. " + "This mode still requires write access to the directory for lock purposes.") @@ -164,7 +171,7 @@ public abstract class GraphDatabaseSettings @Description( "Sets the root directory for file URLs used with the Cypher `LOAD CSV` clause. This must be set to a single " + "directory, restricting access to only those files within that directory and its subdirectories." ) - public static Setting load_csv_file_url_root = setting( "dbms.directories.import", PATH, NO_DEFAULT ); + public static Setting load_csv_file_url_root = pathSetting( "dbms.directories.import", NO_DEFAULT ); @Description( "The maximum amount of time to wait for the database to become available, when " + "starting a new transaction." ) @@ -180,7 +187,7 @@ public abstract class GraphDatabaseSettings @Description("Location of the database plugin directory. Compiled Java JAR files that contain database " + "procedures will be loaded if they are placed in this directory.") - public static final Setting plugin_dir = setting("dbms.directories.plugins", PATH, "plugins" ); + public static final Setting plugin_dir = pathSetting( "dbms.directories.plugins", "plugins" ); @Description( "Threshold for rotation of the debug log." ) public static final Setting store_internal_log_rotation_threshold = setting("dbms.logs.debug.rotation.size", BYTES, "20m", min(0L), max( Long.MAX_VALUE ) ); @@ -420,7 +427,7 @@ private static String defaultPageCacheMemory() public static final Setting log_queries = setting("dbms.logs.query.enabled", BOOLEAN, FALSE ); @Description("Path of the logs directory") - public static final Setting logs_directory = setting("dbms.directories.logs", PATH, "logs"); + public static final Setting logs_directory = pathSetting( "dbms.directories.logs", "logs" ); @Internal public static final Setting log_queries_filename = derivedSetting("dbms.querylog.filename", @@ -451,7 +458,8 @@ private static String defaultPageCacheMemory() public static final Setting auth_enabled = setting( "dbms.security.auth_enabled", BOOLEAN, "false" ); @Internal - public static final Setting auth_store = setting("unsupported.dbms.security.auth_store.location", PATH, NO_DEFAULT); + public static final Setting auth_store = + pathSetting( "unsupported.dbms.security.auth_store.location", NO_DEFAULT ); // Bolt Settings diff --git a/community/kernel/src/main/java/org/neo4j/kernel/configuration/Settings.java b/community/kernel/src/main/java/org/neo4j/kernel/configuration/Settings.java index e281ad386ec57..30c51c988849b 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/configuration/Settings.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/configuration/Settings.java @@ -33,13 +33,15 @@ import org.neo4j.graphdb.config.Configuration; import org.neo4j.graphdb.config.InvalidSettingException; import org.neo4j.graphdb.config.Setting; +import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.helpers.HostnamePort; import org.neo4j.helpers.TimeUtil; import org.neo4j.helpers.collection.Iterables; -import org.neo4j.io.fs.FileUtils; import static java.lang.Character.isDigit; +import static org.neo4j.io.fs.FileUtils.fixSeparatorsInPath; + /** * Create settings for configurations in Neo4j. See {@link org.neo4j.graphdb.factory.GraphDatabaseSettings} for example. * @@ -234,6 +236,56 @@ public OUT apply( Function config ) }; } + public static Setting pathSetting( String name, String defaultValue ) + { + return new Setting() + { + @Override + public String name() + { + return name; + } + + @Override + public String getDefaultValue() + { + return defaultValue; + } + + @Override + public File from( Configuration config ) + { + return config.get( this ); + } + + @Override + public File apply( Function config ) + { + String value = config.apply( name ); + if ( value == null ) + { + value = defaultValue; + } + if (value == null) + { + return null; + } + + String setting = fixSeparatorsInPath( value ); + File settingFile = new File( setting ); + + if ( settingFile.isAbsolute() ) + { + return settingFile; + } + else + { + return new File( GraphDatabaseSettings.neo4j_home.apply( config ), setting ); + } + } + }; + } + private static Function, String> inheritedValue( final Function, String> lookup, final Setting inheritedSetting ) { @@ -545,12 +597,12 @@ public String toString() @Override public File apply( String setting ) { - setting = FileUtils.fixSeparatorsInPath( setting ); - - File settingFile = new File( setting ); - return settingFile.isAbsolute() ? - settingFile : - new File( System.getProperty( "user.dir" ), setting ); + File file = new File( fixSeparatorsInPath( setting ) ); + if ( !file.isAbsolute() ) + { + throw new IllegalArgumentException( "Paths must be absolute. Got " + file ); + } + return file; } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/PlatformModule.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/PlatformModule.java index a99f4954b0283..f62a26d25fe70 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/PlatformModule.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/PlatformModule.java @@ -21,6 +21,7 @@ import java.io.File; import java.io.IOException; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Supplier; @@ -120,6 +121,12 @@ public DependencyResolver get() life = dependencies.satisfyDependency( createLife() ); this.graphDatabaseFacade = dependencies.satisfyDependency( graphDatabaseFacade ); + if ( !params.containsKey( GraphDatabaseSettings.neo4j_home.name() ) ) + { + params = new HashMap<>( params ); + params.put( GraphDatabaseSettings.neo4j_home.name(), providedStoreDir.getAbsolutePath() ); + } + // SPI - provided services config = dependencies.satisfyDependency( new Config( params, getSettingsClasses( externalDependencies.settingsClasses(), externalDependencies.kernelExtensions() ) ) ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/configuration/SettingsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/configuration/SettingsTest.java index 5ee222e0eecd2..f8badff5362cd 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/configuration/SettingsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/configuration/SettingsTest.java @@ -23,32 +23,55 @@ import org.junit.Test; +import org.neo4j.graphdb.config.Setting; + +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; + +import static org.neo4j.kernel.configuration.Settings.NO_DEFAULT; +import static org.neo4j.kernel.configuration.Settings.pathSetting; -public class SettingsTest { +public class SettingsTest +{ @Test - public void makePathsAbsolute() + public void parsesAbsolutePaths() { - File thePath = Settings.PATH.apply( "foobar" ); + File absolutePath = new File( "some/path" ).getAbsoluteFile(); + File thePath = Settings.PATH.apply( absolutePath.toString() ); - assertTrue( thePath.isAbsolute() ); + assertEquals( absolutePath, thePath ); } @Test - public void makePathInCurrentWorkingDirectory() + public void doesntAllowRelativePaths() { - File thePath = Settings.PATH.apply( "foobar" ); - - assertEquals( System.getProperty("user.dir"), thePath.getParent() ); + File relativePath = new File( "some/path" ); + try + { + Settings.PATH.apply( relativePath.toString() ); + fail( "Expected an exception" ); + } + catch ( IllegalArgumentException e ) + { + // expected + } } @Test - public void doNotModifyAbsolutePaths() + public void pathSettingsProvideDefaultValues() { - File absolutePath = new File( "some/path" ).getAbsoluteFile(); - File thePath = Settings.PATH.apply( absolutePath.toString() ); + File theDefault = new File( "/some/path" ).getAbsoluteFile(); + Setting setting = pathSetting( "some.setting", theDefault.getAbsolutePath() ); + assertThat( setting.from( Config.empty() ), is( theDefault ) ); + } - assertEquals( absolutePath, thePath ); + @Test + public void pathSettingsAreNullIfThereIsNoValueAndNoDefault() + { + Setting setting = pathSetting( "some.setting", NO_DEFAULT ); + assertThat( setting.from( Config.empty() ), is( nullValue() ) ); } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/configuration/docs/SettingsDocumenterTest.java b/community/kernel/src/test/java/org/neo4j/kernel/configuration/docs/SettingsDocumenterTest.java index 8530db45c5b18..79d6a4b2ecfb7 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/configuration/docs/SettingsDocumenterTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/configuration/docs/SettingsDocumenterTest.java @@ -34,7 +34,6 @@ import static org.neo4j.kernel.configuration.Settings.BOOLEAN; import static org.neo4j.kernel.configuration.Settings.INTEGER; import static org.neo4j.kernel.configuration.Settings.NO_DEFAULT; -import static org.neo4j.kernel.configuration.Settings.PATH; import static org.neo4j.kernel.configuration.Settings.STRING; import static org.neo4j.kernel.configuration.Settings.setting; @@ -150,7 +149,7 @@ public void shouldDocumentBasicSettingsClass() throws Throwable "[cols=\"<1h,<4\"]%n" + "|===%n" + "|Description a|Public nodefault.%n" + - "|Valid values a|public.nodefault is a path%n" + + "|Valid values a|public.nodefault is a string%n" + "|===%n" + "endif::nonhtmloutput[]%n" + "%n" + @@ -160,7 +159,7 @@ public void shouldDocumentBasicSettingsClass() throws Throwable "[cols=\"<1h,<4\"]%n" + "|===%n" + "|Description a|Public nodefault.%n" + - "|Valid values a|public.nodefault is a path%n" + + "|Valid values a|public.nodefault is a string%n" + "|===%n" + "endif::nonhtmloutput[]%n%n" ) )); } @@ -243,7 +242,7 @@ public void shouldDocumentGroupConfiguration() throws Throwable public interface SimpleSettings { @Description("Public nodefault") - Setting public_nodefault = setting("public.nodefault", PATH, NO_DEFAULT); + Setting public_nodefault = setting( "public.nodefault", STRING, NO_DEFAULT ); @Description("Public with default") Setting public_with_default = setting("public.default", INTEGER, "1"); diff --git a/community/server/src/main/java/org/neo4j/server/CommunityBootstrapper.java b/community/server/src/main/java/org/neo4j/server/CommunityBootstrapper.java index a2cf386b5db90..a5a36521fcc18 100644 --- a/community/server/src/main/java/org/neo4j/server/CommunityBootstrapper.java +++ b/community/server/src/main/java/org/neo4j/server/CommunityBootstrapper.java @@ -19,8 +19,8 @@ */ package org.neo4j.server; -import java.util.HashMap; import java.util.List; +import java.util.Map; import org.neo4j.dbms.DatabaseManagementSystemSettings; import org.neo4j.graphdb.factory.GraphDatabaseSettings; @@ -44,7 +44,7 @@ protected NeoServer createNeoServer( Config config, GraphDatabaseDependencies de } @Override - protected Iterable> settingsClasses( HashMap settings ) + protected Iterable> settingsClasses( Map settings ) { return settingsClasses; } diff --git a/community/server/src/main/java/org/neo4j/server/ServerBootstrapper.java b/community/server/src/main/java/org/neo4j/server/ServerBootstrapper.java index 861d8a32f1e72..35b7f8e3c5dff 100644 --- a/community/server/src/main/java/org/neo4j/server/ServerBootstrapper.java +++ b/community/server/src/main/java/org/neo4j/server/ServerBootstrapper.java @@ -21,7 +21,7 @@ import java.io.File; import java.io.IOException; -import java.util.HashMap; +import java.util.Map; import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; @@ -138,7 +138,7 @@ public NeoServer getServer() protected abstract NeoServer createNeoServer( Config config, GraphDatabaseDependencies dependencies, LogProvider userLogProvider ); - protected abstract Iterable> settingsClasses( HashMap settings ); + protected abstract Iterable> settingsClasses( Map settings ); private static LogProvider setupLogging() { diff --git a/community/server/src/main/java/org/neo4j/server/ServerCommandLineArgs.java b/community/server/src/main/java/org/neo4j/server/ServerCommandLineArgs.java index ffa24af725839..f68bafd31ff7a 100644 --- a/community/server/src/main/java/org/neo4j/server/ServerCommandLineArgs.java +++ b/community/server/src/main/java/org/neo4j/server/ServerCommandLineArgs.java @@ -25,7 +25,6 @@ import org.neo4j.helpers.Args; import org.neo4j.helpers.collection.Pair; -import org.neo4j.kernel.configuration.Settings; import org.neo4j.kernel.impl.util.Converters; import org.neo4j.server.configuration.ConfigLoader; @@ -67,7 +66,7 @@ public Pair[] configOverrides() public Optional configFile() { return Optional.ofNullable( args.get( CONFIG_DIR_ARG ) ) - .map( (dirPath) -> new File( Settings.PATH.apply( dirPath ), ConfigLoader.DEFAULT_CONFIG_FILE_NAME ) ); + .map( (dirPath) -> new File( dirPath, ConfigLoader.DEFAULT_CONFIG_FILE_NAME ) ); } private static Pair[] parseConfigOverrides( Args arguments ) diff --git a/community/server/src/main/java/org/neo4j/server/configuration/ConfigLoader.java b/community/server/src/main/java/org/neo4j/server/configuration/ConfigLoader.java index 40ec7e0bad089..211509550f6ea 100644 --- a/community/server/src/main/java/org/neo4j/server/configuration/ConfigLoader.java +++ b/community/server/src/main/java/org/neo4j/server/configuration/ConfigLoader.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.Consumer; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.helpers.collection.MapUtil; @@ -53,27 +54,38 @@ public ConfigLoader( List> settingsClasses ) } public Config loadConfig( Optional configFile, Log log, Pair... configOverrides ) + { + return loadConfig( configFile, log, settings -> {}, configOverrides ); + } + + public Config loadConfig( Optional configFile, + Log log, + Consumer> customizer, + Pair... configOverrides ) { if ( log == null ) { - throw new IllegalArgumentException( "log cannot be null " ); + throw new IllegalArgumentException( "log cannot be null" ); } - HashMap settings = calculateSettings( configFile, log, configOverrides ); + Map settings = calculateSettings( configFile, log, configOverrides, customizer ); Config config = new Config( settings, settingsClasses.calculate( settings ) ); config.setLogger( log ); return config; } - private HashMap calculateSettings( Optional config, Log log, - Pair[] configOverrides ) + private Map calculateSettings( Optional config, Log log, + Pair[] configOverrides, + Consumer> customizer ) { HashMap settings = new HashMap<>(); config.ifPresent( ( c ) -> settings.putAll( loadFromFile( log, c ) ) ); settings.putAll( toMap( configOverrides ) ); overrideEmbeddedDefaults( settings ); + settings.put( GraphDatabaseSettings.neo4j_home.name(), System.getProperty( "user.dir" ) ); + customizer.accept( settings ); return settings; } @@ -123,6 +135,6 @@ private static Map loadFromFile( Log log, File file ) public interface SettingsClasses { - Iterable> calculate( HashMap settings ); + Iterable> calculate( Map settings ); } } diff --git a/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java b/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java index 24031c94e2003..4712f831d5ed0 100644 --- a/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java +++ b/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java @@ -46,13 +46,13 @@ import static org.neo4j.kernel.configuration.Settings.INTEGER; import static org.neo4j.kernel.configuration.Settings.NORMALIZED_RELATIVE_URI; import static org.neo4j.kernel.configuration.Settings.NO_DEFAULT; -import static org.neo4j.kernel.configuration.Settings.PATH; import static org.neo4j.kernel.configuration.Settings.STRING; import static org.neo4j.kernel.configuration.Settings.STRING_LIST; import static org.neo4j.kernel.configuration.Settings.TRUE; import static org.neo4j.kernel.configuration.Settings.max; import static org.neo4j.kernel.configuration.Settings.min; import static org.neo4j.kernel.configuration.Settings.options; +import static org.neo4j.kernel.configuration.Settings.pathSetting; import static org.neo4j.kernel.configuration.Settings.setting; @Description("Settings used by the server configuration") @@ -212,11 +212,11 @@ private ThirdPartyJaxRsPackage createThirdPartyJaxRsPackage( String packageAndMo @SuppressWarnings("unused") // used only in the startup scripts @Description("Path of the run directory") - Setting run_directory = setting("dbms.directories.run", PATH, "run"); + Setting run_directory = pathSetting( "dbms.directories.run", "run" ); @SuppressWarnings("unused") // used only in the startup scripts @Description("Path of the lib directory") - Setting lib_directory = setting("dbms.directories.lib", PATH, "lib"); + Setting lib_directory = pathSetting( "dbms.directories.lib", "lib" ); @Description("Timeout for idle transactions.") Setting transaction_timeout = setting( "dbms.transaction_timeout", DURATION, "60s" ); diff --git a/community/server/src/test/java/org/neo4j/server/ServerCommandLineArgsTest.java b/community/server/src/test/java/org/neo4j/server/ServerCommandLineArgsTest.java index 524b3992350f5..4db920a3c6613 100644 --- a/community/server/src/test/java/org/neo4j/server/ServerCommandLineArgsTest.java +++ b/community/server/src/test/java/org/neo4j/server/ServerCommandLineArgsTest.java @@ -46,9 +46,7 @@ public void shouldPickUpSpecifiedConfigFile() throws Exception @Test public void shouldResolveConfigFileRelativeToWorkingDirectory() throws Exception { - Optional expectedFile = Optional.of( new File( - new File( System.getProperty( "user.dir" ) ), - "some-dir/" + ConfigLoader.DEFAULT_CONFIG_FILE_NAME ) ); + Optional expectedFile = Optional.of( new File( "some-dir", ConfigLoader.DEFAULT_CONFIG_FILE_NAME ) ); assertEquals( expectedFile, parse( "--config-dir", "some-dir" ).configFile() ); assertEquals( expectedFile, parse( "--config-dir=some-dir" ).configFile() ); } diff --git a/enterprise/metrics/src/main/java/org/neo4j/metrics/MetricsSettings.java b/enterprise/metrics/src/main/java/org/neo4j/metrics/MetricsSettings.java index ebc8c37d18a88..95a921ed64ab5 100644 --- a/enterprise/metrics/src/main/java/org/neo4j/metrics/MetricsSettings.java +++ b/enterprise/metrics/src/main/java/org/neo4j/metrics/MetricsSettings.java @@ -26,6 +26,7 @@ import org.neo4j.helpers.HostnamePort; import org.neo4j.kernel.configuration.Settings; +import static org.neo4j.kernel.configuration.Settings.pathSetting; import static org.neo4j.kernel.configuration.Settings.setting; /** @@ -98,7 +99,7 @@ public class MetricsSettings public static Setting csvEnabled = setting( "metrics.csv.enabled", Settings.BOOLEAN, Settings.FALSE ); @Description( "The target location of the CSV files: a path to a directory wherein a CSV file per reported " + "field will be written." ) - public static Setting csvPath = setting( "dbms.directories.metrics", Settings.PATH, "metrics" ); + public static Setting csvPath = pathSetting( "dbms.directories.metrics", "metrics" ); @Description( "The reporting interval for the CSV files. That is, how often new rows with numbers are appended to " + "the CSV files." ) diff --git a/enterprise/metrics/src/test/java/org/neo4j/metrics/output/CsvOutputTest.java b/enterprise/metrics/src/test/java/org/neo4j/metrics/output/CsvOutputTest.java index 60990ec9b0323..c31c7cfc2d993 100644 --- a/enterprise/metrics/src/test/java/org/neo4j/metrics/output/CsvOutputTest.java +++ b/enterprise/metrics/src/test/java/org/neo4j/metrics/output/CsvOutputTest.java @@ -19,14 +19,15 @@ */ package org.neo4j.metrics.output; +import java.io.File; +import java.nio.file.Files; + import com.codahale.metrics.MetricRegistry; import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import java.io.File; -import java.nio.file.Files; - +import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.io.fs.DefaultFileSystemAbstraction; import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.impl.factory.DatabaseInfo; @@ -40,7 +41,9 @@ import static java.lang.System.currentTimeMillis; import static java.util.concurrent.TimeUnit.SECONDS; + import static org.junit.Assert.fail; + import static org.neo4j.helpers.collection.MapUtil.stringMap; public class CsvOutputTest @@ -50,50 +53,33 @@ public class CsvOutputTest @Rule public final TargetDirectory.TestDirectory directory = TargetDirectory.testDirForTest( getClass() ); - private File storeDir; private KernelContext kernelContext; @Before public void setup() { - storeDir = directory.directory(); + File storeDir = directory.directory(); kernelContext = new SimpleKernelContext( new DefaultFileSystemAbstraction(), storeDir, DatabaseInfo.UNKNOWN, new Dependencies() ); } @Test - public void shouldHaveMetricsCsvPathEndUpRelativeToWorkingDirectoryIfRelativePathSpecified() throws Exception - { - // GIVEN - String name = "metrics.csv"; - Config config = config( - MetricsSettings.csvEnabled.name(), "true", - MetricsSettings.csvInterval.name(), "10ms", - MetricsSettings.csvPath.name(), name ); - life.add( new CsvOutput( config, new MetricRegistry(), NullLog.getInstance(), kernelContext ) ); - - // WHEN - life.start(); - - // THEN - waitForFileToAppear( new File( System.getProperty( "user.dir" ), name ) ); - } - - @Test - public void shouldHaveRelativeMetricsCsvPathBeRelativeToWorkingDirectory() throws Exception + public void shouldHaveRelativeMetricsCsvPathBeRelativeToNeo4jHome() throws Exception { // GIVEN + File home = directory.absolutePath(); Config config = config( MetricsSettings.csvEnabled.name(), "true", MetricsSettings.csvInterval.name(), "10ms", - MetricsSettings.csvPath.name(), "test.csv" ); + MetricsSettings.csvPath.name(), "the-metrics-dir", + GraphDatabaseSettings.neo4j_home.name(), home.getAbsolutePath() ); life.add( new CsvOutput( config, new MetricRegistry(), NullLog.getInstance(), kernelContext ) ); // WHEN life.start(); // THEN - waitForFileToAppear( new File( System.getProperty( "user.dir" ), "test.csv" ) ); + waitForFileToAppear( new File( home, "the-metrics-dir" ) ); } @Test diff --git a/enterprise/server-enterprise/src/main/java/org/neo4j/server/enterprise/EnterpriseBootstrapper.java b/enterprise/server-enterprise/src/main/java/org/neo4j/server/enterprise/EnterpriseBootstrapper.java index 57725b1369e15..f4211d47b1f1f 100644 --- a/enterprise/server-enterprise/src/main/java/org/neo4j/server/enterprise/EnterpriseBootstrapper.java +++ b/enterprise/server-enterprise/src/main/java/org/neo4j/server/enterprise/EnterpriseBootstrapper.java @@ -19,7 +19,7 @@ */ package org.neo4j.server.enterprise; -import java.util.HashMap; +import java.util.Map; import org.neo4j.cluster.ClusterSettings; import org.neo4j.helpers.collection.Iterables; @@ -44,7 +44,7 @@ protected NeoServer createNeoServer( Config configurator, GraphDatabaseDependenc } @Override - protected Iterable> settingsClasses( HashMap settings ) + protected Iterable> settingsClasses( Map settings ) { if ( isHAMode( settings ) ) { @@ -58,7 +58,7 @@ protected Iterable> settingsClasses( HashMap settings ) } } - private boolean isHAMode( HashMap settings ) + private boolean isHAMode( Map settings ) { return new Config( settings, EnterpriseServerSettings.class ).get( mode ).equals( "HA" ); } diff --git a/packaging/neo4j-desktop/src/main/java/org/neo4j/desktop/runtime/DesktopConfigurator.java b/packaging/neo4j-desktop/src/main/java/org/neo4j/desktop/runtime/DesktopConfigurator.java index 9c90f45e7ac4d..e0bf29155276f 100644 --- a/packaging/neo4j-desktop/src/main/java/org/neo4j/desktop/runtime/DesktopConfigurator.java +++ b/packaging/neo4j-desktop/src/main/java/org/neo4j/desktop/runtime/DesktopConfigurator.java @@ -25,6 +25,7 @@ import org.neo4j.dbms.DatabaseManagementSystemSettings; import org.neo4j.desktop.config.Installation; import org.neo4j.graphdb.config.Setting; +import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.helpers.HostnamePort; import org.neo4j.kernel.configuration.Config; import org.neo4j.logging.FormattedLog; @@ -34,8 +35,8 @@ import org.neo4j.server.configuration.ServerSettings.HttpConnector; import static org.neo4j.dbms.DatabaseManagementSystemSettings.data_directory; -import static org.neo4j.server.configuration.ServerSettings.certificates_directory; import static org.neo4j.helpers.collection.Pair.pair; +import static org.neo4j.server.configuration.ServerSettings.certificates_directory; public class DesktopConfigurator { @@ -56,8 +57,7 @@ public void refresh() config = new ConfigLoader( CommunityBootstrapper.settingsClasses).loadConfig( Optional.of( installation.getConfigurationsFile() ), FormattedLog.toOutputStream( System.out ), - - /** Desktop-specific config overrides */ + (settings) -> settings.put( GraphDatabaseSettings.neo4j_home.name(), dbDir.getAbsolutePath() ), pair( data_directory.name(), new File( dbDir, "./data" ).getAbsolutePath() ), pair( certificates_directory.name(), new File( dbDir, "./certificates" ).getAbsolutePath() ), pair( DatabaseManagementSystemSettings.database_path.name(), dbDir.getAbsolutePath() ) ); diff --git a/packaging/neo4j-desktop/src/test/java/org/neo4j/desktop/runtime/DatabaseActionsTest.java b/packaging/neo4j-desktop/src/test/java/org/neo4j/desktop/runtime/DatabaseActionsTest.java index dc167e9c23115..97fe8ab8532f3 100644 --- a/packaging/neo4j-desktop/src/test/java/org/neo4j/desktop/runtime/DatabaseActionsTest.java +++ b/packaging/neo4j-desktop/src/test/java/org/neo4j/desktop/runtime/DatabaseActionsTest.java @@ -47,7 +47,7 @@ public class DatabaseActionsTest private File configFile; @Test - public void shouldCreateMessagesLogInWorkingDirectory() throws Exception + public void shouldCreateMessagesLogBelowStoreDir() throws Exception { // Given Installation installation = mock( Installation.class ); @@ -63,7 +63,7 @@ public void shouldCreateMessagesLogInWorkingDirectory() throws Exception databaseActions.start(); // Then - File logFile = new File( new File( System.getProperty("user.dir"), "logs" ), "debug.log" ); + File logFile = new File( new File( storeDir, "logs" ), "debug.log" ); assertTrue( logFile.exists() ); } finally