Skip to content

Commit

Permalink
Allow for an edition SPI.
Browse files Browse the repository at this point in the history
The edition modules can expose various top-level functionality
which make integration tests cleaner.
  • Loading branch information
martinfurmanski committed Mar 14, 2016
1 parent 78fe029 commit 067d879
Show file tree
Hide file tree
Showing 19 changed files with 50 additions and 28 deletions.
Expand Up @@ -34,10 +34,10 @@
public class CommunityFacadeFactory extends GraphDatabaseFacadeFactory public class CommunityFacadeFactory extends GraphDatabaseFacadeFactory
{ {
@Override @Override
public GraphDatabaseFacade newFacade( File storeDir, Map<String,String> params, Dependencies dependencies, public GraphDatabaseFacade initFacade( File storeDir, Map<String,String> params, Dependencies dependencies,
GraphDatabaseFacade graphDatabaseFacade ) GraphDatabaseFacade graphDatabaseFacade )
{ {
return super.newFacade( storeDir, params, newDependencies( dependencies ).settingsClasses( return super.initFacade( storeDir, params, newDependencies( dependencies ).settingsClasses(
asList( append( GraphDatabaseSettings.class, dependencies.settingsClasses() ) ) ), asList( append( GraphDatabaseSettings.class, dependencies.settingsClasses() ) ) ),
graphDatabaseFacade ); graphDatabaseFacade );
} }
Expand Down
Expand Up @@ -54,6 +54,10 @@
*/ */
public abstract class EditionModule public abstract class EditionModule
{ {
public interface SPI
{
}

public IdGeneratorFactory idGeneratorFactory; public IdGeneratorFactory idGeneratorFactory;


public LabelTokenHolder labelTokenHolder; public LabelTokenHolder labelTokenHolder;
Expand Down Expand Up @@ -111,4 +115,9 @@ protected AuthManager createAuthManager(Config config, LifeSupport life, LogProv
} }


} }

protected EditionModule.SPI spi()
{
return null;
}
} }
Expand Up @@ -112,6 +112,7 @@ public class GraphDatabaseFacade implements GraphDatabaseAPI
private NodeProxy.NodeActions nodeActions; private NodeProxy.NodeActions nodeActions;
private RelationshipProxy.RelationshipActions relActions; private RelationshipProxy.RelationshipActions relActions;
private SPI spi; private SPI spi;
private EditionModule.SPI editionSPI;


/** /**
* This is what you need to implemenent to get your very own {@link GraphDatabaseFacade}. This SPI exists as a thin * This is what you need to implemenent to get your very own {@link GraphDatabaseFacade}. This SPI exists as a thin
Expand Down Expand Up @@ -184,14 +185,21 @@ public GraphDatabaseFacade()
{ {
} }


public void init( SPI spi )
{
init( spi, null );
}

/** /**
* Create a new Core API facade, backed by the given SPI. * Create a new Core API facade, backed by the given SPI.
*/ */
public void init( SPI spi ) public void init( SPI spi, EditionModule.SPI editionSPI )
{ {
IndexProviderImpl idxProvider = new IndexProviderImpl( this, spi::currentStatement ); IndexProviderImpl idxProvider = new IndexProviderImpl( this, spi::currentStatement );


this.spi = spi; this.spi = spi;
this.editionSPI = editionSPI;

this.relActions = new StandardRelationshipActions( spi::currentStatement, spi::currentTransaction, this.relActions = new StandardRelationshipActions( spi::currentStatement, spi::currentTransaction,
this::assertTransactionOpen, ( id ) -> new NodeProxy( nodeActions, id ), this ); this::assertTransactionOpen, ( id ) -> new NodeProxy( nodeActions, id ), this );
this.nodeActions = this.nodeActions =
Expand Down Expand Up @@ -591,6 +599,11 @@ public StoreId storeId()
return spi.storeId(); return spi.storeId();
} }


public EditionModule.SPI editionSPI()
{
return editionSPI;
}

@Override @Override
public URL validateURLAccess( URL url ) throws URLAccessValidationError public URL validateURLAccess( URL url ) throws URLAccessValidationError
{ {
Expand Down
Expand Up @@ -47,7 +47,7 @@
* <p/> * <p/>
* It is abstract in order for subclasses to specify their own {@link org.neo4j.kernel.impl.factory.EditionModule} * It is abstract in order for subclasses to specify their own {@link org.neo4j.kernel.impl.factory.EditionModule}
* implementations. Subclasses also have to set the edition name * implementations. Subclasses also have to set the edition name
* in overridden version of {@link #newFacade(File, Map, GraphDatabaseFacadeFactory.Dependencies, GraphDatabaseFacade)}, * in overridden version of {@link #initFacade(File, Map, GraphDatabaseFacadeFactory.Dependencies, GraphDatabaseFacade)},
* which is used for logging and similar. * which is used for logging and similar.
* <p/> * <p/>
* To create test versions of databases, override an edition factory (e.g. {@link org.neo4j.kernel.impl.factory * To create test versions of databases, override an edition factory (e.g. {@link org.neo4j.kernel.impl.factory
Expand Down Expand Up @@ -105,7 +105,7 @@ public static class Configuration
*/ */
public GraphDatabaseFacade newFacade( File storeDir, Map<String, String> params, final Dependencies dependencies ) public GraphDatabaseFacade newFacade( File storeDir, Map<String, String> params, final Dependencies dependencies )
{ {
return newFacade( storeDir, params, dependencies, new GraphDatabaseFacade() ); return initFacade( storeDir, params, dependencies, new GraphDatabaseFacade() );
} }


/** /**
Expand All @@ -118,7 +118,7 @@ public GraphDatabaseFacade newFacade( File storeDir, Map<String, String> params,
* @param graphDatabaseFacade the already created facade which needs initialisation * @param graphDatabaseFacade the already created facade which needs initialisation
* @return the initialised {@link GraphDatabaseFacade} * @return the initialised {@link GraphDatabaseFacade}
*/ */
public GraphDatabaseFacade newFacade( File storeDir, Map<String, String> params, final Dependencies dependencies, public GraphDatabaseFacade initFacade( File storeDir, Map<String, String> params, final Dependencies dependencies,
final GraphDatabaseFacade graphDatabaseFacade ) final GraphDatabaseFacade graphDatabaseFacade )
{ {
PlatformModule platform = createPlatform( storeDir, params, dependencies, graphDatabaseFacade ); PlatformModule platform = createPlatform( storeDir, params, dependencies, graphDatabaseFacade );
Expand All @@ -128,7 +128,7 @@ public GraphDatabaseFacade newFacade( File storeDir, Map<String, String> params,
CoreAPIAvailabilityGuard coreAPIAvailabilityGuard = edition.coreAPIAvailabilityGuard; CoreAPIAvailabilityGuard coreAPIAvailabilityGuard = edition.coreAPIAvailabilityGuard;


// Start it // Start it
graphDatabaseFacade.init( new ClassicCoreSPI( platform, dataSource, msgLog, coreAPIAvailabilityGuard ) ); graphDatabaseFacade.init( new ClassicCoreSPI( platform, dataSource, msgLog, coreAPIAvailabilityGuard ), edition.spi() );


Throwable error = null; Throwable error = null;
try try
Expand Down
Expand Up @@ -68,6 +68,6 @@ public EmbeddedGraphDatabase( File storeDir,
protected void create( File storeDir, Map<String, String> params, protected void create( File storeDir, Map<String, String> params,
GraphDatabaseFacadeFactory.Dependencies dependencies) GraphDatabaseFacadeFactory.Dependencies dependencies)
{ {
new CommunityFacadeFactory().newFacade( storeDir, params, dependencies, this ); new CommunityFacadeFactory().initFacade( storeDir, params, dependencies, this );
} }
} }
Expand Up @@ -645,7 +645,7 @@ protected PlatformModule createPlatform( File storeDir, Map<String, String> para
{ {
return new ImpermanentPlatformModule( storeDir, params, databaseInfo(), dependencies, graphDatabaseFacade ); return new ImpermanentPlatformModule( storeDir, params, databaseInfo(), dependencies, graphDatabaseFacade );
} }
}.newFacade( storeDir, params, dependencies, this ); }.initFacade( storeDir, params, dependencies, this );
} }
}; };
} }
Expand Down
Expand Up @@ -78,7 +78,7 @@ public void shouldThrowAppropriateExceptionIfStartFails()
try try
{ {
// When // When
db.newFacade( dir.graphDbDir(), Collections.<String,String>emptyMap(), deps, mockFacade ); db.initFacade( dir.graphDbDir(), Collections.<String,String>emptyMap(), deps, mockFacade );
fail( "Should have thrown " + RuntimeException.class ); fail( "Should have thrown " + RuntimeException.class );
} }
catch ( RuntimeException exception ) catch ( RuntimeException exception )
Expand All @@ -100,7 +100,7 @@ public void shouldThrowAppropriateExceptionIfBothStartAndShutdownFail()
try try
{ {
// When // When
db.newFacade( dir.graphDbDir(), Collections.<String,String>emptyMap(), deps, mockFacade ); db.initFacade( dir.graphDbDir(), Collections.<String,String>emptyMap(), deps, mockFacade );
fail( "Should have thrown " + RuntimeException.class ); fail( "Should have thrown " + RuntimeException.class );
} }
catch ( RuntimeException exception ) catch ( RuntimeException exception )
Expand Down
Expand Up @@ -105,7 +105,7 @@ public void assertSchemaWritesAllowed() throws InvalidTransactionTypeKernelExcep
} }
}; };
} }
}.newFacade( storeDir, params, dependencies, this ); }.initFacade( storeDir, params, dependencies, this );
} }
} }
} }
Expand Up @@ -247,7 +247,7 @@ protected FileSystemAbstraction createFileSystemAbstraction()
} }
}; };
} }
}.newFacade( storeDir, params, dependencies, this ); }.initFacade( storeDir, params, dependencies, this );
} }


} }
Expand Down
Expand Up @@ -97,7 +97,7 @@ protected FileSystemAbstraction createFileSystemAbstraction()
} }
}; };
} }
}.newFacade( storeDir, params, dependencies, this ); }.initFacade( storeDir, params, dependencies, this );
} }
}; };


Expand Down
Expand Up @@ -146,7 +146,7 @@ protected PlatformModule createPlatform( File storeDir, Map<String, String> para
{ {
return new ImpermanentPlatformModule( storeDir, params, databaseInfo(), dependencies, graphDatabaseFacade ); return new ImpermanentPlatformModule( storeDir, params, databaseInfo(), dependencies, graphDatabaseFacade );
} }
}.newFacade( storeDir, new HashMap<>( params ), dependencies, this ); }.initFacade( storeDir, new HashMap<>( params ), dependencies, this );
} }


private void trackUnclosedUse( File storeDir ) private void trackUnclosedUse( File storeDir )
Expand Down
Expand Up @@ -55,7 +55,7 @@ protected FileSystemAbstraction createFileSystemAbstraction()
} }
}; };
} }
}.newFacade( storeDir, params, dependencies, this ); }.initFacade( storeDir, params, dependencies, this );
} }




Expand Down
Expand Up @@ -32,18 +32,18 @@
abstract class EnterpriseCoreEdgeFacadeFactory extends GraphDatabaseFacadeFactory abstract class EnterpriseCoreEdgeFacadeFactory extends GraphDatabaseFacadeFactory
{ {
@Override @Override
public GraphDatabaseFacade newFacade( File storeDir, Map<String, String> params, Dependencies dependencies, public GraphDatabaseFacade initFacade( File storeDir, Map<String, String> params, Dependencies dependencies,
GraphDatabaseFacade graphDatabaseFacade ) GraphDatabaseFacade graphDatabaseFacade )
{ {
return super.newFacade( storeDir, params, dependencies, graphDatabaseFacade ); return super.initFacade( storeDir, params, dependencies, graphDatabaseFacade );
} }


protected void makeHazelcastQuiet( PlatformModule platformModule ) protected void makeHazelcastQuiet( PlatformModule platformModule )
{ {
// Make hazelcast quiet for core and edge servers // Make hazelcast quiet for core and edge servers
if ( platformModule.config.get( CoreEdgeClusterSettings.disable_middleware_logging ) ) if ( platformModule.config.get( CoreEdgeClusterSettings.disable_middleware_logging ) )
{ {
// This is clunky, but the documented programmtic way doesn't seem to work // This is clunky, but the documented programmatic way doesn't seem to work
System.setProperty( "hazelcast.logging.type", "none" ); System.setProperty( "hazelcast.logging.type", "none" );
} }
} }
Expand Down
Expand Up @@ -39,7 +39,7 @@ public CoreGraphDatabase( File storeDir, Map<String, String> params,
GraphDatabaseFacadeFactory.Dependencies dependencies, GraphDatabaseFacadeFactory.Dependencies dependencies,
DiscoveryServiceFactory discoveryServiceFactory ) DiscoveryServiceFactory discoveryServiceFactory )
{ {
new EnterpriseCoreFacadeFactory( discoveryServiceFactory ).newFacade( storeDir, params, dependencies, this ); new EnterpriseCoreFacadeFactory( discoveryServiceFactory ).initFacade( storeDir, params, dependencies, this );


// See same thing in HighlyAvailableGraphDatabase for details // See same thing in HighlyAvailableGraphDatabase for details
raft = getDependencyResolver().resolveDependency( RaftInstance.class ); raft = getDependencyResolver().resolveDependency( RaftInstance.class );
Expand Down
Expand Up @@ -38,6 +38,6 @@ public EdgeGraphDatabase( File storeDir, Map<String, String> params, Dependencie
public EdgeGraphDatabase( File storeDir, Map<String, String> params, Dependencies public EdgeGraphDatabase( File storeDir, Map<String, String> params, Dependencies
dependencies, DiscoveryServiceFactory discoveryServiceFactory ) dependencies, DiscoveryServiceFactory discoveryServiceFactory )
{ {
new EnterpriseEdgeFacadeFactory( discoveryServiceFactory ).newFacade( storeDir, params, dependencies, this ); new EnterpriseEdgeFacadeFactory( discoveryServiceFactory ).initFacade( storeDir, params, dependencies, this );
} }
} }
Expand Up @@ -38,7 +38,7 @@ public class HighlyAvailableGraphDatabase extends GraphDatabaseFacade
{ {
public HighlyAvailableGraphDatabase( File storeDir, Map<String,String> params, GraphDatabaseFacadeFactory.Dependencies dependencies ) public HighlyAvailableGraphDatabase( File storeDir, Map<String,String> params, GraphDatabaseFacadeFactory.Dependencies dependencies )
{ {
newHighlyAvailableFacadeFactory().newFacade( storeDir, params, dependencies, this ); newHighlyAvailableFacadeFactory().initFacade( storeDir, params, dependencies, this );
} }


protected HighlyAvailableFacadeFactory newHighlyAvailableFacadeFactory() protected HighlyAvailableFacadeFactory newHighlyAvailableFacadeFactory()
Expand Down
Expand Up @@ -36,10 +36,10 @@
public class HighlyAvailableFacadeFactory extends GraphDatabaseFacadeFactory public class HighlyAvailableFacadeFactory extends GraphDatabaseFacadeFactory
{ {
@Override @Override
public GraphDatabaseFacade newFacade( File storeDir, Map<String, String> params, Dependencies dependencies, public GraphDatabaseFacade initFacade( File storeDir, Map<String, String> params, Dependencies dependencies,
GraphDatabaseFacade graphDatabaseFacade ) GraphDatabaseFacade graphDatabaseFacade )
{ {
return super.newFacade( storeDir, params, dependencies, graphDatabaseFacade ); return super.initFacade( storeDir, params, dependencies, graphDatabaseFacade );
} }


@Override @Override
Expand Down
Expand Up @@ -54,6 +54,6 @@ public EnterpriseGraphDatabase( File storeDir, Map<String,String> params,
public EnterpriseGraphDatabase( File storeDir, Map<String,String> params, public EnterpriseGraphDatabase( File storeDir, Map<String,String> params,
GraphDatabaseFacadeFactory.Dependencies dependencies ) GraphDatabaseFacadeFactory.Dependencies dependencies )
{ {
new EnterpriseFacadeFactory().newFacade( storeDir, params, dependencies, this ); new EnterpriseFacadeFactory().initFacade( storeDir, params, dependencies, this );
} }
} }
Expand Up @@ -36,10 +36,10 @@
public class EnterpriseFacadeFactory extends GraphDatabaseFacadeFactory public class EnterpriseFacadeFactory extends GraphDatabaseFacadeFactory
{ {
@Override @Override
public GraphDatabaseFacade newFacade( File storeDir, Map<String,String> params, Dependencies dependencies, public GraphDatabaseFacade initFacade( File storeDir, Map<String,String> params, Dependencies dependencies,
GraphDatabaseFacade graphDatabaseFacade ) GraphDatabaseFacade graphDatabaseFacade )
{ {
return super.newFacade( storeDir, params, dependencies, graphDatabaseFacade ); return super.initFacade( storeDir, params, dependencies, graphDatabaseFacade );
} }


@Override @Override
Expand Down

0 comments on commit 067d879

Please sign in to comment.