Skip to content

Commit

Permalink
Split EditionModule. Introduce Abstract and Default edition modules.
Browse files Browse the repository at this point in the history
  • Loading branch information
MishaDemianenko committed Sep 13, 2018
1 parent 64ac33b commit 3dfd767
Show file tree
Hide file tree
Showing 22 changed files with 130 additions and 95 deletions.
Expand Up @@ -33,8 +33,8 @@
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.graphdb.factory.module.PlatformModule;
import org.neo4j.graphdb.factory.module.edition.AbstractEditionModule;
import org.neo4j.graphdb.factory.module.edition.CommunityEditionModule;
import org.neo4j.graphdb.factory.module.edition.EditionModule;
import org.neo4j.graphdb.mockfs.EphemeralFileSystemAbstraction;
import org.neo4j.graphdb.mockfs.UncloseableDelegatingFileSystemAbstraction;
import org.neo4j.graphdb.security.URLAccessRule;
Expand Down Expand Up @@ -254,7 +254,7 @@ protected TestGraphDatabaseFacadeFactory( TestGraphDatabaseFactoryState state, b
}

protected TestGraphDatabaseFacadeFactory( TestGraphDatabaseFactoryState state, boolean impermanent,
DatabaseInfo databaseInfo, Function<PlatformModule,EditionModule> editionFactory )
DatabaseInfo databaseInfo, Function<PlatformModule,AbstractEditionModule> editionFactory )
{
super( databaseInfo, editionFactory );
this.state = state;
Expand Down
Expand Up @@ -37,8 +37,8 @@
import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory;
import org.neo4j.graphdb.factory.GraphDatabaseBuilder;
import org.neo4j.graphdb.factory.module.PlatformModule;
import org.neo4j.graphdb.factory.module.edition.AbstractEditionModule;
import org.neo4j.graphdb.factory.module.edition.CommunityEditionModule;
import org.neo4j.graphdb.factory.module.edition.EditionModule;
import org.neo4j.graphdb.factory.module.id.IdContextFactoryBuilder;
import org.neo4j.helpers.collection.Iterables;
import org.neo4j.internal.kernel.api.LabelSet;
Expand Down Expand Up @@ -749,7 +749,7 @@ protected void create(
Config config,
GraphDatabaseFacadeFactory.Dependencies dependencies )
{
Function<PlatformModule,EditionModule> factory =
Function<PlatformModule,AbstractEditionModule> factory =
platformModule -> new CommunityEditionModuleWithCustomIdContextFactory( platformModule, idFactory );
new GraphDatabaseFacadeFactory( DatabaseInfo.COMMUNITY, factory )
{
Expand Down
Expand Up @@ -28,8 +28,8 @@
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory;
import org.neo4j.graphdb.factory.module.PlatformModule;
import org.neo4j.graphdb.factory.module.edition.AbstractEditionModule;
import org.neo4j.graphdb.factory.module.edition.CommunityEditionModule;
import org.neo4j.graphdb.factory.module.edition.EditionModule;
import org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException;
import org.neo4j.kernel.api.KernelTransaction;
import org.neo4j.kernel.configuration.Config;
Expand Down Expand Up @@ -77,7 +77,7 @@ class FakeHaDatabase extends ImpermanentGraphDatabase
@Override
protected void create( File storeDir, Map<String, String> params, GraphDatabaseFacadeFactory.Dependencies dependencies )
{
Function<PlatformModule,EditionModule> factory =
Function<PlatformModule,AbstractEditionModule> factory =
platformModule -> new CommunityEditionModule( platformModule )
{
@Override
Expand Down
Expand Up @@ -25,7 +25,7 @@
import org.neo4j.graphdb.facade.spi.ClassicCoreSPI;
import org.neo4j.graphdb.factory.module.DataSourceModule;
import org.neo4j.graphdb.factory.module.PlatformModule;
import org.neo4j.graphdb.factory.module.edition.EditionModule;
import org.neo4j.graphdb.factory.module.edition.AbstractEditionModule;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
import org.neo4j.kernel.impl.proc.Procedures;
import org.neo4j.kernel.lifecycle.LifecycleAdapter;
Expand All @@ -37,12 +37,12 @@ public final class DefaultDatabaseManager extends LifecycleAdapter implements Da
{
private GraphDatabaseFacade database;
private final PlatformModule platform;
private final EditionModule edition;
private final AbstractEditionModule edition;
private final Procedures procedures;
private final Logger log;
private final GraphDatabaseFacade graphDatabaseFacade;

public DefaultDatabaseManager( PlatformModule platform, EditionModule edition, Procedures procedures,
public DefaultDatabaseManager( PlatformModule platform, AbstractEditionModule edition, Procedures procedures,
Logger log, GraphDatabaseFacade graphDatabaseFacade )
{
this.platform = platform;
Expand Down
Expand Up @@ -32,7 +32,7 @@
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.graphdb.factory.module.DataSourceModule;
import org.neo4j.graphdb.factory.module.PlatformModule;
import org.neo4j.graphdb.factory.module.edition.EditionModule;
import org.neo4j.graphdb.factory.module.edition.AbstractEditionModule;
import org.neo4j.graphdb.security.URLAccessRule;
import org.neo4j.graphdb.spatial.Geometry;
import org.neo4j.graphdb.spatial.Point;
Expand Down Expand Up @@ -74,10 +74,10 @@

/**
* This is the main factory for creating database instances. It delegates creation to three different modules
* ({@link PlatformModule}, {@link EditionModule}, and {@link DataSourceModule}),
* ({@link PlatformModule}, {@link AbstractEditionModule}, and {@link DataSourceModule}),
* which create all the specific services needed to run a graph database.
* <p>
* It is abstract in order for subclasses to specify their own {@link EditionModule}
* It is abstract in order for subclasses to specify their own {@link AbstractEditionModule}
* implementations. Subclasses also have to set the edition name in overridden version of
* {@link #initFacade(File, Map, GraphDatabaseFacadeFactory.Dependencies, GraphDatabaseFacade)},
* which is used for logging and similar.
Expand Down Expand Up @@ -109,10 +109,10 @@ public interface Dependencies
}

protected final DatabaseInfo databaseInfo;
private final Function<PlatformModule,EditionModule> editionFactory;
private final Function<PlatformModule,AbstractEditionModule> editionFactory;

public GraphDatabaseFacadeFactory( DatabaseInfo databaseInfo,
Function<PlatformModule,EditionModule> editionFactory )
Function<PlatformModule,AbstractEditionModule> editionFactory )
{
this.databaseInfo = databaseInfo;
this.editionFactory = editionFactory;
Expand Down Expand Up @@ -161,7 +161,7 @@ public GraphDatabaseFacade initFacade( File storeDir, Config config, final Depen
final GraphDatabaseFacade graphDatabaseFacade )
{
PlatformModule platform = createPlatform( storeDir, config, dependencies );
EditionModule edition = editionFactory.apply( platform );
AbstractEditionModule edition = editionFactory.apply( platform );

Procedures procedures = setupProcedures( platform, edition, graphDatabaseFacade );
platform.dependencies.satisfyDependency( new NonTransactionalDbmsOperations( procedures ) );
Expand Down Expand Up @@ -235,7 +235,7 @@ protected PlatformModule createPlatform( File storeDir, Config config, final Dep
return new PlatformModule( storeDir, config, databaseInfo, dependencies );
}

private static Procedures setupProcedures( PlatformModule platform, EditionModule editionModule, GraphDatabaseFacade facade )
private static Procedures setupProcedures( PlatformModule platform, AbstractEditionModule editionModule, GraphDatabaseFacade facade )
{
File pluginDir = platform.config.get( GraphDatabaseSettings.plugin_dir );
Log internalLog = platform.logging.getInternalLog( Procedures.class );
Expand Down Expand Up @@ -287,7 +287,7 @@ private static Procedures setupProcedures( PlatformModule platform, EditionModul
return procedures;
}

private static BoltServer createBoltServer( PlatformModule platform, EditionModule edition, DatabaseManager databaseManager )
private static BoltServer createBoltServer( PlatformModule platform, AbstractEditionModule edition, DatabaseManager databaseManager )
{
return new BoltServer( databaseManager, platform.jobScheduler,
platform.connectorPortRegister, edition.getConnectionTracker(), platform.usageData, platform.config, platform.clock, platform.monitors,
Expand Down
Expand Up @@ -22,7 +22,7 @@
import java.util.function.Supplier;

import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.factory.module.edition.EditionModule;
import org.neo4j.graphdb.factory.module.edition.AbstractEditionModule;
import org.neo4j.graphdb.factory.module.edition.context.DatabaseEditionContext;
import org.neo4j.kernel.NeoStoreDataSource;
import org.neo4j.kernel.api.InwardKernel;
Expand All @@ -41,7 +41,7 @@ public class DataSourceModule

public final CoreAPIAvailabilityGuard coreAPIAvailabilityGuard;

public DataSourceModule( String databaseName, PlatformModule platformModule, EditionModule editionModule, Procedures procedures,
public DataSourceModule( String databaseName, PlatformModule platformModule, AbstractEditionModule editionModule, Procedures procedures,
GraphDatabaseFacade graphDatabaseFacade )
{
platformModule.diagnosticsManager.prependProvider( platformModule.config );
Expand Down
Expand Up @@ -24,7 +24,7 @@

import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.graphdb.factory.module.edition.EditionModule;
import org.neo4j.graphdb.factory.module.edition.AbstractEditionModule;
import org.neo4j.graphdb.security.URLAccessRule;
import org.neo4j.index.internal.gbptree.GroupingRecoveryCleanupWorkCollector;
import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector;
Expand Down Expand Up @@ -86,7 +86,7 @@

/**
* Platform module for {@link GraphDatabaseFacadeFactory}. This creates
* all the services needed by {@link EditionModule} implementations.
* all the services needed by {@link AbstractEditionModule} implementations.
*/
public class PlatformModule
{
Expand Down
Expand Up @@ -23,16 +23,13 @@
import java.time.Clock;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

import org.neo4j.dbms.database.DatabaseManager;
import org.neo4j.dmbs.database.DefaultDatabaseManager;
import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.graphdb.factory.module.PlatformModule;
import org.neo4j.graphdb.factory.module.edition.context.DatabaseEditionContext;
import org.neo4j.graphdb.factory.module.edition.context.DefaultEditionModuleDatabaseContext;
import org.neo4j.graphdb.factory.module.id.IdContextFactory;
import org.neo4j.helpers.Service;
import org.neo4j.internal.kernel.api.exceptions.KernelException;
import org.neo4j.io.fs.FileSystemAbstraction;
Expand All @@ -44,16 +41,12 @@
import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.api.CommitProcessFactory;
import org.neo4j.kernel.impl.api.SchemaWriteGuard;
import org.neo4j.kernel.impl.constraints.ConstraintSemantics;
import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge;
import org.neo4j.kernel.impl.core.TokenHolders;
import org.neo4j.kernel.impl.factory.AccessCapability;
import org.neo4j.kernel.impl.factory.DatabaseInfo;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
import org.neo4j.kernel.impl.locking.Locks;
import org.neo4j.kernel.impl.locking.StatementLocksFactory;
import org.neo4j.kernel.impl.proc.ProcedureConfig;
import org.neo4j.kernel.impl.proc.Procedures;
import org.neo4j.kernel.impl.transaction.TransactionHeaderInformationFactory;
Expand All @@ -75,16 +68,11 @@
* Edition module for {@link GraphDatabaseFacadeFactory}. Implementations of this class
* need to create all the services that would be specific for a particular edition of the database.
*/
public abstract class EditionModule
public abstract class AbstractEditionModule
{
private final DatabaseTransactionStats databaseStatistics = new DatabaseTransactionStats();
protected NetworkConnectionTracker connectionTracker;
protected ThreadToStatementContextBridge threadToTransactionBridge;
protected IdContextFactory idContextFactory;
protected Function<String, TokenHolders> tokenHoldersProvider;
protected Supplier<Locks> locksSupplier;
protected Function<Locks, StatementLocksFactory> statementLocksFactoryProvider;
protected CommitProcessFactory commitProcessFactory;
protected long transactionStartTimeout;
protected TransactionHeaderInformationFactory headerInformationFactory;
protected SchemaWriteGuard schemaWriteGuard;
Expand All @@ -95,10 +83,7 @@ public abstract class EditionModule
protected AvailabilityGuard globalAvailabilityGuard;
protected SecurityProvider securityProvider;

public DatabaseEditionContext createDatabaseContext( String databaseName )
{
return new DefaultEditionModuleDatabaseContext( this, databaseName );
}
public abstract DatabaseEditionContext createDatabaseContext( String databaseName );

protected FileSystemWatcherService createFileSystemWatcherService( FileSystemAbstraction fileSystem, File databaseDirectory,
LogService logging, JobScheduler jobScheduler, Config config, Predicate<String> fileNameFilter )
Expand Down Expand Up @@ -148,7 +133,7 @@ protected void publishEditionInfo( UsageData sysInfo, DatabaseInfo databaseInfo,
config.augment( GraphDatabaseSettings.editionName, databaseInfo.edition.toString() );
}

public DatabaseManager createDatabaseManager( GraphDatabaseFacade graphDatabaseFacade, PlatformModule platform, EditionModule edition,
public DatabaseManager createDatabaseManager( GraphDatabaseFacade graphDatabaseFacade, PlatformModule platform, AbstractEditionModule edition,
Procedures procedures, Logger msgLog )
{
return new DefaultDatabaseManager( platform, edition, procedures, msgLog, graphDatabaseFacade );
Expand Down Expand Up @@ -232,11 +217,6 @@ public TransactionHeaderInformationFactory getHeaderInformationFactory()
return headerInformationFactory;
}

public CommitProcessFactory getCommitProcessFactory()
{
return commitProcessFactory;
}

public ConstraintSemantics getConstraintSemantics()
{
return constraintSemantics;
Expand All @@ -257,26 +237,6 @@ public Function<File,FileSystemWatcherService> getWatcherServiceFactory()
return watcherServiceFactory;
}

public IdContextFactory getIdContextFactory()
{
return idContextFactory;
}

public Function<String,TokenHolders> getTokenHoldersProvider()
{
return tokenHoldersProvider;
}

public Supplier<Locks> getLocksSupplier()
{
return locksSupplier;
}

public Function<Locks,StatementLocksFactory> getStatementLocksFactoryProvider()
{
return statementLocksFactoryProvider;
}

public ThreadToStatementContextBridge getThreadToTransactionBridge()
{
return threadToTransactionBridge;
Expand Down
Expand Up @@ -71,10 +71,10 @@
import static org.neo4j.graphdb.factory.EditionLocksFactories.createLockManager;

/**
* This implementation of {@link EditionModule} creates the implementations of services
* This implementation of {@link AbstractEditionModule} creates the implementations of services
* that are specific to the Community edition.
*/
public class CommunityEditionModule extends EditionModule
public class CommunityEditionModule extends DefaultEditionModule
{
public static final String COMMUNITY_SECURITY_MODULE_ID = "community-security-module";

Expand Down
@@ -0,0 +1,71 @@
/*
* Copyright (c) 2002-2018 "Neo4j,"
* Neo4j Sweden AB [http://neo4j.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.graphdb.factory.module.edition;

import java.util.function.Function;
import java.util.function.Supplier;

import org.neo4j.graphdb.factory.module.edition.context.DatabaseEditionContext;
import org.neo4j.graphdb.factory.module.edition.context.DefaultEditionModuleDatabaseContext;
import org.neo4j.graphdb.factory.module.id.IdContextFactory;
import org.neo4j.kernel.impl.api.CommitProcessFactory;
import org.neo4j.kernel.impl.core.TokenHolders;
import org.neo4j.kernel.impl.locking.Locks;
import org.neo4j.kernel.impl.locking.StatementLocksFactory;

public abstract class DefaultEditionModule extends AbstractEditionModule
{
protected CommitProcessFactory commitProcessFactory;
protected IdContextFactory idContextFactory;
protected Function<String,TokenHolders> tokenHoldersProvider;
protected Supplier<Locks> locksSupplier;
protected Function<Locks,StatementLocksFactory> statementLocksFactoryProvider;

@Override
public DatabaseEditionContext createDatabaseContext( String databaseName )
{
return new DefaultEditionModuleDatabaseContext( this, databaseName );
}

public CommitProcessFactory getCommitProcessFactory()
{
return commitProcessFactory;
}

public IdContextFactory getIdContextFactory()
{
return idContextFactory;
}

public Function<String,TokenHolders> getTokenHoldersProvider()
{
return tokenHoldersProvider;
}

public Supplier<Locks> getLocksSupplier()
{
return locksSupplier;
}

public Function<Locks,StatementLocksFactory> getStatementLocksFactoryProvider()
{
return statementLocksFactoryProvider;
}
}
Expand Up @@ -22,7 +22,8 @@
import java.io.File;
import java.util.function.Function;

import org.neo4j.graphdb.factory.module.edition.EditionModule;
import org.neo4j.graphdb.factory.module.edition.AbstractEditionModule;
import org.neo4j.graphdb.factory.module.edition.DefaultEditionModule;
import org.neo4j.graphdb.factory.module.id.DatabaseIdContext;
import org.neo4j.io.pagecache.IOLimiter;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
Expand Down Expand Up @@ -54,11 +55,11 @@ public class DefaultEditionModuleDatabaseContext implements DatabaseEditionConte
private final TokenHolders tokenHolders;
private final Locks locks;
private final DatabaseTransactionStats transactionMonitor;
private final EditionModule editionModule;
private final AbstractEditionModule editionModule;
private final DatabaseIdContext idContext;
private final StatementLocksFactory statementLocksFactory;

public DefaultEditionModuleDatabaseContext( EditionModule editionModule, String databaseName )
public DefaultEditionModuleDatabaseContext( DefaultEditionModule editionModule, String databaseName )
{
this.databaseName = databaseName;
this.transactionStartTimeout = editionModule.getTransactionStartTimeout();
Expand Down

0 comments on commit 3dfd767

Please sign in to comment.