Skip to content

Commit

Permalink
Server uses single config instance internally.
Browse files Browse the repository at this point in the history
This deprecates all public exposure of config APIs that are not Neo4j Config,
and modifies the server to use a single Config instance internally.

Config is loaded in the same way as before, from neo4j.properties and
neo4j-server.properties, but now neither file is special - any config can
conceivably be specified in each.

This is yet another step towards consolidating config, and a helpful step for
browser to access config specified in neo4j-server.properties, since those
settings will now be available via jmx.
  • Loading branch information
jakewins committed Jul 7, 2015
1 parent 0d982bc commit 346608e
Show file tree
Hide file tree
Showing 44 changed files with 815 additions and 548 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,25 @@
package org.neo4j.server.advanced;

import org.neo4j.kernel.GraphDatabaseDependencies;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.logging.LogProvider;
import org.neo4j.server.CommunityBootstrapper;
import org.neo4j.server.NeoServer;
import org.neo4j.server.configuration.ConfigurationBuilder;

public class AdvancedBootstrapper extends CommunityBootstrapper
{
public static void main( String[] args )
{
Integer exit = new AdvancedBootstrapper().start();
int exit = start( new AdvancedBootstrapper(), args );
if ( exit != 0 )
{
System.exit( exit );
}
}

@Override
protected NeoServer createNeoServer( ConfigurationBuilder configurator, GraphDatabaseDependencies dependencies, LogProvider userLogProvider )
protected NeoServer createNeoServer( Config config, GraphDatabaseDependencies dependencies, LogProvider userLogProvider )
{
return new AdvancedNeoServer( configurator, dependencies, userLogProvider );
return new AdvancedNeoServer( config, dependencies, userLogProvider );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,26 +22,26 @@
import java.util.Arrays;

import org.neo4j.helpers.collection.Iterables;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.factory.CommunityFacadeFactory;
import org.neo4j.logging.LogProvider;
import org.neo4j.server.CommunityNeoServer;
import org.neo4j.server.advanced.modules.JMXManagementModule;
import org.neo4j.server.configuration.ConfigurationBuilder;
import org.neo4j.server.database.Database;
import org.neo4j.server.modules.ServerModule;

public class AdvancedNeoServer extends CommunityNeoServer
{
public AdvancedNeoServer( ConfigurationBuilder configurator, Database.Factory dbFactory,
public AdvancedNeoServer( Config config, Database.Factory dbFactory,
CommunityFacadeFactory.Dependencies dependencies, LogProvider logProvider )
{
super( configurator, dbFactory, dependencies, logProvider );
super( config, dbFactory, dependencies, logProvider );
}

public AdvancedNeoServer( ConfigurationBuilder configurator, CommunityFacadeFactory.Dependencies dependencies,
public AdvancedNeoServer( Config config, CommunityFacadeFactory.Dependencies dependencies,
LogProvider logProvider )
{
super( configurator, dependencies, logProvider );
super( config, dependencies, logProvider );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
import java.io.File;
import java.io.IOException;

import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory;
import org.neo4j.logging.LogProvider;
import org.neo4j.logging.NullLogProvider;
import org.neo4j.server.advanced.AdvancedNeoServer;
import org.neo4j.server.configuration.ConfigurationBuilder;
import org.neo4j.server.helpers.CommunityServerBuilder;
import org.neo4j.server.rest.web.DatabaseActions;

Expand Down Expand Up @@ -56,25 +56,26 @@ public AdvancedNeoServer build() throws IOException
}

@Override
protected AdvancedNeoServer build(File configFile, ConfigurationBuilder configurator, GraphDatabaseFacadeFactory.Dependencies dependencies)
protected AdvancedNeoServer build(File configFile, Config config, GraphDatabaseFacadeFactory.Dependencies dependencies)
{
return new TestAdvancedNeoServer( configurator, configFile, dependencies, logProvider );
return new TestAdvancedNeoServer( config, configFile, dependencies, logProvider );
}

private class TestAdvancedNeoServer extends AdvancedNeoServer
{
private final File configFile;

public TestAdvancedNeoServer( ConfigurationBuilder propertyFileConfigurator, File configFile, GraphDatabaseFacadeFactory.Dependencies dependencies, LogProvider logProvider )
public TestAdvancedNeoServer( Config config, File configFile, GraphDatabaseFacadeFactory.Dependencies dependencies, LogProvider
logProvider )
{
super( propertyFileConfigurator, lifecycleManagingDatabase( persistent ? COMMUNITY_FACTORY : IN_MEMORY_DB ), dependencies, logProvider );
super( config, lifecycleManagingDatabase( persistent ? COMMUNITY_FACTORY : IN_MEMORY_DB ), dependencies, logProvider );
this.configFile = configFile;
}

@Override
protected DatabaseActions createDatabaseActions()
{
return createDatabaseActionsObject( database, configurator );
return createDatabaseActionsObject( database, getConfig() );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,21 @@
import org.junit.Rule;
import org.junit.Test;

import java.util.Map;

import org.neo4j.kernel.GraphDatabaseDependencies;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.logging.NullLog;
import org.neo4j.logging.NullLogProvider;
import org.neo4j.server.NeoServer;
import org.neo4j.server.advanced.AdvancedNeoServer;
import org.neo4j.server.advanced.helpers.AdvancedServerBuilder;
import org.neo4j.server.configuration.ConfigurationBuilder;
import org.neo4j.server.configuration.Configurator;
import org.neo4j.server.configuration.PropertyFileConfigurator;
import org.neo4j.server.configuration.ServerConfigFactory;
import org.neo4j.test.CleanupRule;
import org.neo4j.test.TargetDirectory;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.neo4j.helpers.collection.MapUtil.stringMap;

public class ServerManagementTest
{
Expand All @@ -54,7 +52,7 @@ public void shouldBeAbleToRestartServer() throws Exception
String dbDirectory1 = baseDir.directory( "db1" ).getAbsolutePath();
String dbDirectory2 = baseDir.directory( "db2" ).getAbsolutePath();

ConfigurationBuilder config = new PropertyFileConfigurator(
Config config = ServerConfigFactory.loadConfig( null,
AdvancedServerBuilder
.server()
.withDefaultDatabaseTuning()
Expand All @@ -69,7 +67,7 @@ public void shouldBeAbleToRestartServer() throws Exception
assertEquals( dbDirectory1, server.getDatabase().getLocation() );

// Change the database location
setProperty( config.configuration(), Configurator.DATABASE_LOCATION_PROPERTY_KEY, dbDirectory2 );
config.augment( stringMap( Configurator.DATABASE_LOCATION_PROPERTY_KEY, dbDirectory2 ) );
ServerManagement bean = new ServerManagement( server );
bean.restartServer();

Expand All @@ -82,11 +80,4 @@ private static GraphDatabaseDependencies graphDbDependencies()
{
return GraphDatabaseDependencies.newDependencies().userLogProvider( NullLogProvider.getInstance() );
}

private static void setProperty( Config config, String key, String value )
{
Map<String,String> params = config.getParams();
params.put( key, value );
config.applyChanges( params );
}
}
18 changes: 13 additions & 5 deletions community/kernel/src/main/java/org/neo4j/helpers/Pair.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,23 +29,23 @@ public abstract class Pair<T1, T2>
{
@SuppressWarnings( "rawtypes" )
private static final Pair EMPTY = Pair.of( null, null );

@SuppressWarnings( "unchecked" )
public static <T1, T2> Pair<T1, T2> empty()
public static <T1, T2> Pair<T1,T2> empty()
{
return EMPTY;
}

/**
* Create a new pair of objects.
*
* @param first the first object in the pair.
* @param other the other object in the pair.
* @return a new pair of the two parameters.
*/
public static <T1, T2> Pair<T1, T2> of( final T1 first, final T2 other )
public static <T1, T2> Pair<T1,T2> pair( final T1 first, final T2 other )
{
return new Pair<T1, T2>()
return new Pair<T1,T2>()
{
@Override
public T1 first()
Expand All @@ -61,6 +61,14 @@ public T2 other()
};
}

/**
* Alias of {@link #pair(Object, Object)}.
*/
public static <T1, T2> Pair<T1, T2> of( final T1 first, final T2 other )
{
return pair( first, other );
}

Pair()
{
// package private, limited number of subclasses
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,23 @@ public Config setProperty( String key, Object value )
return this;
}

/**
* Augment the existing config with new settings, overriding any conflicting settings, but keeping all old
* non-overlapping ones.
* @param changes settings to add and override
*/
public Config augment( Map<String,String> changes )
{
Map<String,String> params = getParams();
params.putAll( changes );
applyChanges( params );
return this;
}

/**
* Replace the current set of configuration parameters with another one.
*/
public synchronized void applyChanges( Map<String, String> newConfiguration )
public synchronized Config applyChanges( Map<String, String> newConfiguration )
{
newConfiguration = migrator.apply( newConfiguration, log );

Expand Down Expand Up @@ -174,7 +187,7 @@ public synchronized void applyChanges( Map<String, String> newConfiguration )
if ( configurationChanges.isEmpty() )
{
// Don't bother... nothing changed.
return;
return this;
}

// Make the change
Expand All @@ -196,6 +209,8 @@ public synchronized void applyChanges( Map<String, String> newConfiguration )
listener.notifyConfigurationChanges( configurationChanges );
}
}

return this;
}

public Iterable<Class<?>> getSettingsClasses()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,4 +191,19 @@ public void shouldBeAbleToRegisterSettingsClassesAfterInstantiation() throws Exc
assertThat( config.get( MyMigratingSettings.newer ), equalTo( "hello!" ) );
assertThat( config.get( MySettingsWithDefaults.hello ), equalTo( "Hello, World!" ) );
}

@Test
public void shouldBeAbleToAgumentConfig() throws Exception
{
// Given
Config config = new Config( stringMap( "newer", "old", "non-overlapping", "huzzah" ) );

// When
config.augment( stringMap( "newer", "new", "unrelated", "hello" ) );

// Then
assertThat( config.get( setting("newer", STRING, "") ), equalTo( "new" ) );
assertThat( config.get( setting("non-overlapping", STRING, "") ), equalTo( "huzzah" ) );
assertThat( config.get( setting("unrelated", STRING, "") ), equalTo( "hello" ) );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,7 @@ public void run()
{
log.error( "Worker for session '" + session.key() + "' crashed: " + e.getMessage(), e );
userLog.error( "Fatal, worker for session '" + session.key() + "' crashed. Please" +
" contact your support representative if you are unable to resolve this error. Error " +
"message was: " + e.getMessage() );
" contact your support representative if you are unable to resolve this.", e );

// Attempt to close the session, as an effort to release locks and other resources held by the session
session.close();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,14 @@
import org.neo4j.io.fs.DefaultFileSystemAbstraction;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.kernel.GraphDatabaseDependencies;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory;
import org.neo4j.logging.FormattedLogProvider;
import org.neo4j.server.CommunityNeoServer;
import org.neo4j.server.configuration.ServerSettings;

import static org.neo4j.io.file.Files.createOrOpenAsOuputStream;
import static org.neo4j.server.configuration.ConfigurationBuilder.ConfiguratorWrappingConfigurationBuilder.toStringForThirdPartyPackageProperty;
import static org.neo4j.server.configuration.Configurator.DATABASE_LOCATION_PROPERTY_KEY;
import static org.neo4j.server.configuration.Configurator.WEBSERVER_PORT_PROPERTY_KEY;
import static org.neo4j.test.Digests.md5Hex;
Expand Down Expand Up @@ -104,10 +106,13 @@ public ServerControls newServer()
{
throw new RuntimeException( "Unable to create log file", e );
}

config.put( ServerSettings.third_party_packages.name(), toStringForThirdPartyPackageProperty( extensions.toList() ) );

final FormattedLogProvider userLogProvider = FormattedLogProvider.toOutputStream( logOutputStream );
GraphDatabaseFacadeFactory.Dependencies dependencies = GraphDatabaseDependencies.newDependencies().userLogProvider( userLogProvider );
InProcessServerControls controls = new InProcessServerControls( serverFolder,
new CommunityNeoServer( new MapConfigurator( config, extensions.toList() ), dependencies, userLogProvider ), logOutputStream );
new CommunityNeoServer( new Config(config), dependencies, userLogProvider ), logOutputStream );
controls.start();
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public Map<String, String> getDatabaseTuningProperties()
@Override
public Config configuration()
{
Map<String, String> serverConfigParams = new HashMap();
Map<String, String> serverConfigParams = new HashMap<>();
serverConfigParams.putAll( config );
serverConfigParams.put( ServerSettings.third_party_packages.name(),
ConfiguratorWrappingConfigurationBuilder.toStringForThirdPartyPackageProperty( extensions ) );
Expand Down
Loading

0 comments on commit 346608e

Please sign in to comment.