handler )
{
- dataSource.transactionEventHandlers.unregisterTransactionEventHandler( handler );
+ dataSource.neoStoreDataSource.getTransactionEventHandlers().unregisterTransactionEventHandler( handler );
}
@Override
diff --git a/community/neo4j/src/main/java/org/neo4j/graphdb/facade/spi/ProcedureGDBFacadeSPI.java b/community/neo4j/src/main/java/org/neo4j/graphdb/facade/spi/ProcedureGDBFacadeSPI.java
index 43156276a733..213a8cf0a5a9 100644
--- a/community/neo4j/src/main/java/org/neo4j/graphdb/facade/spi/ProcedureGDBFacadeSPI.java
+++ b/community/neo4j/src/main/java/org/neo4j/graphdb/facade/spi/ProcedureGDBFacadeSPI.java
@@ -114,7 +114,7 @@ public Result executeQuery( String query, MapValue parameters, TransactionalCont
@Override
public AutoIndexing autoIndexing()
{
- return sourceModule.autoIndexing;
+ return sourceModule.neoStoreDataSource.getAutoIndexing();
}
@Override
diff --git a/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/DataSourceModule.java b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/DataSourceModule.java
index 4aa5910de299..54a52fb84875 100644
--- a/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/DataSourceModule.java
+++ b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/DataSourceModule.java
@@ -23,125 +23,34 @@
import java.util.function.Supplier;
import org.neo4j.graphdb.GraphDatabaseService;
-import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory;
-import org.neo4j.io.fs.FileSystemAbstraction;
-import org.neo4j.io.pagecache.PageCache;
import org.neo4j.kernel.NeoStoreDataSource;
import org.neo4j.kernel.api.InwardKernel;
-import org.neo4j.kernel.api.explicitindex.AutoIndexing;
-import org.neo4j.kernel.configuration.Config;
-import org.neo4j.kernel.impl.api.DefaultExplicitIndexProvider;
-import org.neo4j.kernel.impl.api.NonTransactionalTokenNameLookup;
-import org.neo4j.kernel.impl.api.explicitindex.InternalAutoIndexing;
-import org.neo4j.kernel.impl.api.index.IndexingService;
import org.neo4j.kernel.impl.core.TokenHolders;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
-import org.neo4j.kernel.impl.index.IndexConfigStore;
-import org.neo4j.kernel.impl.logging.LogService;
import org.neo4j.kernel.impl.proc.Procedures;
import org.neo4j.kernel.impl.store.StoreId;
-import org.neo4j.kernel.impl.transaction.log.checkpoint.StoreCopyCheckPointMutex;
-import org.neo4j.kernel.impl.transaction.log.files.LogFileCreationMonitor;
import org.neo4j.kernel.impl.transaction.state.DataSourceManager;
-import org.neo4j.kernel.info.DiagnosticsManager;
-import org.neo4j.kernel.internal.DatabaseHealth;
-import org.neo4j.kernel.internal.TransactionEventHandlers;
-import org.neo4j.kernel.monitoring.Monitors;
-/**
- * Datasource module for {@link GraphDatabaseFacadeFactory}. This implements all the
- * remaining services not yet created by either the {@link PlatformModule} or {@link EditionModule}.
- *
- * When creating new services, this would be the default place to put them, unless they need to go into the other
- * modules for any reason.
- */
public class DataSourceModule
{
public final NeoStoreDataSource neoStoreDataSource;
public final Supplier kernelAPI;
- public final StoreCopyCheckPointMutex storeCopyCheckPointMutex;
-
- public final TransactionEventHandlers transactionEventHandlers;
-
public final Supplier storeId;
- public final AutoIndexing autoIndexing;
-
public final TokenHolders tokenHolders;
public DataSourceModule( String databaseName, final PlatformModule platformModule, EditionModule editionModule, Procedures procedures,
GraphDatabaseFacade graphDatabaseFacade )
{
- Config config = platformModule.config;
- LogService logging = platformModule.logging;
- FileSystemAbstraction fileSystem = platformModule.fileSystem;
- DataSourceManager dataSourceManager = platformModule.dataSourceManager;
-
tokenHolders = editionModule.tokenHoldersSupplier.get();
-
File databaseDirectory = new File( platformModule.storeDir, databaseName );
- DiagnosticsManager diagnosticsManager = platformModule.diagnosticsManager;
- Monitors monitors = new Monitors( platformModule.monitors );
-
- transactionEventHandlers = new TransactionEventHandlers( graphDatabaseFacade );
-
- diagnosticsManager.prependProvider( config );
-
- PageCache pageCache = platformModule.pageCache;
-
- autoIndexing = new InternalAutoIndexing( platformModule.config, tokenHolders.propertyKeyTokens() );
-
- DatabaseHealth databaseHealth = new DatabaseHealth( platformModule.panicEventGenerator, logging.getInternalLog( DatabaseHealth.class ) );
- IndexConfigStore indexConfigStore = new IndexConfigStore( databaseDirectory, fileSystem );
- DefaultExplicitIndexProvider explicitIndexProvider = new DefaultExplicitIndexProvider();
- NonTransactionalTokenNameLookup tokenNameLookup = new NonTransactionalTokenNameLookup( tokenHolders );
- storeCopyCheckPointMutex = new StoreCopyCheckPointMutex();
+ platformModule.diagnosticsManager.prependProvider( platformModule.config );
neoStoreDataSource = new NeoStoreDataSource(
- databaseName,
- databaseDirectory,
- config,
- editionModule.idGeneratorFactory,
- logging,
- platformModule.jobScheduler,
- tokenNameLookup,
- platformModule.dependencies,
- tokenHolders,
- editionModule.statementLocksFactory,
- editionModule.schemaWriteGuard,
- transactionEventHandlers,
- monitors.newMonitor( IndexingService.Monitor.class ),
- fileSystem,
- platformModule.transactionMonitor,
- databaseHealth,
- monitors.newMonitor( LogFileCreationMonitor.class ),
- editionModule.headerInformationFactory,
- editionModule.commitProcessFactory,
- autoIndexing,
- indexConfigStore,
- explicitIndexProvider,
- pageCache,
- editionModule.constraintSemantics,
- monitors,
- platformModule.tracers,
- procedures,
- editionModule.ioLimiter,
- platformModule.availabilityGuard,
- platformModule.clock,
- editionModule.accessCapability,
- storeCopyCheckPointMutex,
- platformModule.recoveryCleanupWorkCollector,
- editionModule.idController,
- platformModule.databaseInfo,
- platformModule.versionContextSupplier,
- platformModule.collectionsFactorySupplier,
- platformModule.kernelExtensionFactories,
- editionModule.watcherServiceFactory,
- graphDatabaseFacade,
- platformModule.engineProviders );
+ new ModularDatabaseCreationContext( databaseName, databaseDirectory, platformModule, editionModule, procedures, graphDatabaseFacade, tokenHolders ) );
this.storeId = neoStoreDataSource::getStoreId;
this.kernelAPI = neoStoreDataSource::getKernel;
diff --git a/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/ModularDatabaseCreationContext.java b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/ModularDatabaseCreationContext.java
new file mode 100644
index 000000000000..da546a6bb685
--- /dev/null
+++ b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/ModularDatabaseCreationContext.java
@@ -0,0 +1,363 @@
+/*
+ * 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 .
+ */
+package org.neo4j.graphdb.factory.module;
+
+import java.io.File;
+import java.util.function.Function;
+
+import org.neo4j.graphdb.DependencyResolver;
+import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector;
+import org.neo4j.internal.kernel.api.TokenNameLookup;
+import org.neo4j.io.fs.FileSystemAbstraction;
+import org.neo4j.io.pagecache.IOLimiter;
+import org.neo4j.io.pagecache.PageCache;
+import org.neo4j.io.pagecache.tracing.cursor.context.VersionContextSupplier;
+import org.neo4j.kernel.AvailabilityGuard;
+import org.neo4j.kernel.DatabaseCreationContext;
+import org.neo4j.kernel.api.explicitindex.AutoIndexing;
+import org.neo4j.kernel.configuration.Config;
+import org.neo4j.kernel.extension.KernelExtensionFactory;
+import org.neo4j.kernel.impl.api.CommitProcessFactory;
+import org.neo4j.kernel.impl.api.DefaultExplicitIndexProvider;
+import org.neo4j.kernel.impl.api.ExplicitIndexProvider;
+import org.neo4j.kernel.impl.api.NonTransactionalTokenNameLookup;
+import org.neo4j.kernel.impl.api.SchemaWriteGuard;
+import org.neo4j.kernel.impl.api.explicitindex.InternalAutoIndexing;
+import org.neo4j.kernel.impl.api.index.IndexingService;
+import org.neo4j.kernel.impl.constraints.ConstraintSemantics;
+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.index.IndexConfigStore;
+import org.neo4j.kernel.impl.locking.StatementLocksFactory;
+import org.neo4j.kernel.impl.logging.LogService;
+import org.neo4j.kernel.impl.proc.Procedures;
+import org.neo4j.kernel.impl.query.QueryEngineProvider;
+import org.neo4j.kernel.impl.storageengine.impl.recordstorage.id.IdController;
+import org.neo4j.kernel.impl.store.id.IdGeneratorFactory;
+import org.neo4j.kernel.impl.transaction.TransactionHeaderInformationFactory;
+import org.neo4j.kernel.impl.transaction.TransactionMonitor;
+import org.neo4j.kernel.impl.transaction.log.checkpoint.StoreCopyCheckPointMutex;
+import org.neo4j.kernel.impl.transaction.log.files.LogFileCreationMonitor;
+import org.neo4j.kernel.impl.util.collection.CollectionsFactorySupplier;
+import org.neo4j.kernel.impl.util.watcher.FileSystemWatcherService;
+import org.neo4j.kernel.internal.DatabaseHealth;
+import org.neo4j.kernel.internal.TransactionEventHandlers;
+import org.neo4j.kernel.monitoring.Monitors;
+import org.neo4j.kernel.monitoring.tracing.Tracers;
+import org.neo4j.scheduler.JobScheduler;
+import org.neo4j.time.SystemNanoClock;
+
+public class ModularDatabaseCreationContext implements DatabaseCreationContext
+{
+ private final String databaseName;
+ private final File databaseDirectory;
+ private final Config config;
+ private final IdGeneratorFactory idGeneratorFactory;
+ private final LogService logService;
+ private final JobScheduler scheduler;
+ private final TokenNameLookup tokenNameLookup;
+ private final DependencyResolver globalDependencies;
+ private final TokenHolders tokenHolders;
+ private final StatementLocksFactory statementLocksFactory;
+ private final SchemaWriteGuard schemaWriteGuard;
+ private final TransactionEventHandlers transactionEventHandlers;
+ private final IndexingService.Monitor indexingServiceMonitor;
+ private final FileSystemAbstraction fs;
+ private final TransactionMonitor transactionMonitor;
+ private final DatabaseHealth databaseHealth;
+ private final LogFileCreationMonitor physicalLogMonitor;
+ private final TransactionHeaderInformationFactory transactionHeaderInformationFactory;
+ private final CommitProcessFactory commitProcessFactory;
+ private final AutoIndexing autoIndexing;
+ private final IndexConfigStore indexConfigStore;
+ private final ExplicitIndexProvider explicitIndexProvider;
+ private final PageCache pageCache;
+ private final ConstraintSemantics constraintSemantics;
+ private final Monitors monitors;
+ private final Tracers tracers;
+ private final Procedures procedures;
+ private final IOLimiter ioLimiter;
+ private final AvailabilityGuard availabilityGuard;
+ private final SystemNanoClock clock;
+ private final AccessCapability accessCapability;
+ private final StoreCopyCheckPointMutex storeCopyCheckPointMutex;
+ private final RecoveryCleanupWorkCollector recoveryCleanupWorkCollector;
+ private final IdController idController;
+ private final DatabaseInfo databaseInfo;
+ private final VersionContextSupplier versionContextSupplier;
+ private final CollectionsFactorySupplier collectionsFactorySupplier;
+ private final Iterable> kernelExtensionFactories;
+ private final Function watcherServiceFactory;
+ private final GraphDatabaseFacade facade;
+ private final Iterable engineProviders;
+
+ ModularDatabaseCreationContext( String databaseName, File databaseDirectory, PlatformModule platformModule, EditionModule editionModule,
+ Procedures procedures, GraphDatabaseFacade facade, TokenHolders tokenHolders )
+ {
+ this.databaseName = databaseName;
+ this.databaseDirectory = databaseDirectory;
+ this.config = platformModule.config;
+ this.idGeneratorFactory = editionModule.idGeneratorFactory;
+ this.logService = platformModule.logging;
+ this.scheduler = platformModule.jobScheduler;
+ this.globalDependencies = platformModule.dependencies;
+ this.tokenHolders = tokenHolders;
+ this.tokenNameLookup = new NonTransactionalTokenNameLookup( tokenHolders );
+ this.statementLocksFactory = editionModule.statementLocksFactory;
+ this.schemaWriteGuard = editionModule.schemaWriteGuard;
+ this.transactionEventHandlers = new TransactionEventHandlers( facade );
+ this.monitors = new Monitors( platformModule.monitors );
+ this.indexingServiceMonitor = monitors.newMonitor( IndexingService.Monitor.class );
+ this.physicalLogMonitor = monitors.newMonitor( LogFileCreationMonitor.class );
+ this.fs = platformModule.fileSystem;
+ this.transactionMonitor = platformModule.transactionMonitor;
+ this.databaseHealth = new DatabaseHealth( platformModule.panicEventGenerator, logService.getInternalLog( DatabaseHealth.class ) );
+ this.transactionHeaderInformationFactory = editionModule.headerInformationFactory;
+ this.commitProcessFactory = editionModule.commitProcessFactory;
+ this.autoIndexing = new InternalAutoIndexing( platformModule.config, tokenHolders.propertyKeyTokens() );
+ this.indexConfigStore = new IndexConfigStore( databaseDirectory, fs );
+ this.explicitIndexProvider = new DefaultExplicitIndexProvider();
+ this.pageCache = platformModule.pageCache;
+ this.constraintSemantics = editionModule.constraintSemantics;
+ this.tracers = platformModule.tracers;
+ this.procedures = procedures;
+ this.ioLimiter = editionModule.ioLimiter;
+ this.availabilityGuard = platformModule.availabilityGuard;
+ this.clock = platformModule.clock;
+ this.accessCapability = editionModule.accessCapability;
+ this.storeCopyCheckPointMutex = new StoreCopyCheckPointMutex();
+ this.recoveryCleanupWorkCollector = platformModule.recoveryCleanupWorkCollector;
+ this.idController = editionModule.idController;
+ this.databaseInfo = platformModule.databaseInfo;
+ this.versionContextSupplier = platformModule.versionContextSupplier;
+ this.collectionsFactorySupplier = platformModule.collectionsFactorySupplier;
+ this.kernelExtensionFactories = platformModule.kernelExtensionFactories;
+ this.watcherServiceFactory = editionModule.watcherServiceFactory;
+ this.facade = facade;
+ this.engineProviders = platformModule.engineProviders;
+ }
+
+ public String getDatabaseName()
+ {
+ return databaseName;
+ }
+
+ public File getDatabaseDirectory()
+ {
+ return databaseDirectory;
+ }
+
+ public Config getConfig()
+ {
+ return config;
+ }
+
+ public IdGeneratorFactory getIdGeneratorFactory()
+ {
+ return idGeneratorFactory;
+ }
+
+ public LogService getLogService()
+ {
+ return logService;
+ }
+
+ public JobScheduler getScheduler()
+ {
+ return scheduler;
+ }
+
+ public TokenNameLookup getTokenNameLookup()
+ {
+ return tokenNameLookup;
+ }
+
+ public DependencyResolver getGlobalDependencies()
+ {
+ return globalDependencies;
+ }
+
+ public TokenHolders getTokenHolders()
+ {
+ return tokenHolders;
+ }
+
+ public StatementLocksFactory getStatementLocksFactory()
+ {
+ return statementLocksFactory;
+ }
+
+ public SchemaWriteGuard getSchemaWriteGuard()
+ {
+ return schemaWriteGuard;
+ }
+
+ public TransactionEventHandlers getTransactionEventHandlers()
+ {
+ return transactionEventHandlers;
+ }
+
+ public IndexingService.Monitor getIndexingServiceMonitor()
+ {
+ return indexingServiceMonitor;
+ }
+
+ public FileSystemAbstraction getFs()
+ {
+ return fs;
+ }
+
+ public TransactionMonitor getTransactionMonitor()
+ {
+ return transactionMonitor;
+ }
+
+ public DatabaseHealth getDatabaseHealth()
+ {
+ return databaseHealth;
+ }
+
+ public LogFileCreationMonitor getPhysicalLogMonitor()
+ {
+ return physicalLogMonitor;
+ }
+
+ public TransactionHeaderInformationFactory getTransactionHeaderInformationFactory()
+ {
+ return transactionHeaderInformationFactory;
+ }
+
+ public CommitProcessFactory getCommitProcessFactory()
+ {
+ return commitProcessFactory;
+ }
+
+ public AutoIndexing getAutoIndexing()
+ {
+ return autoIndexing;
+ }
+
+ public IndexConfigStore getIndexConfigStore()
+ {
+ return indexConfigStore;
+ }
+
+ public ExplicitIndexProvider getExplicitIndexProvider()
+ {
+ return explicitIndexProvider;
+ }
+
+ public PageCache getPageCache()
+ {
+ return pageCache;
+ }
+
+ public ConstraintSemantics getConstraintSemantics()
+ {
+ return constraintSemantics;
+ }
+
+ public Monitors getMonitors()
+ {
+ return monitors;
+ }
+
+ public Tracers getTracers()
+ {
+ return tracers;
+ }
+
+ public Procedures getProcedures()
+ {
+ return procedures;
+ }
+
+ public IOLimiter getIoLimiter()
+ {
+ return ioLimiter;
+ }
+
+ public AvailabilityGuard getAvailabilityGuard()
+ {
+ return availabilityGuard;
+ }
+
+ public SystemNanoClock getClock()
+ {
+ return clock;
+ }
+
+ public AccessCapability getAccessCapability()
+ {
+ return accessCapability;
+ }
+
+ public StoreCopyCheckPointMutex getStoreCopyCheckPointMutex()
+ {
+ return storeCopyCheckPointMutex;
+ }
+
+ public RecoveryCleanupWorkCollector getRecoveryCleanupWorkCollector()
+ {
+ return recoveryCleanupWorkCollector;
+ }
+
+ public IdController getIdController()
+ {
+ return idController;
+ }
+
+ public DatabaseInfo getDatabaseInfo()
+ {
+ return databaseInfo;
+ }
+
+ public VersionContextSupplier getVersionContextSupplier()
+ {
+ return versionContextSupplier;
+ }
+
+ public CollectionsFactorySupplier getCollectionsFactorySupplier()
+ {
+ return collectionsFactorySupplier;
+ }
+
+ public Iterable> getKernelExtensionFactories()
+ {
+ return kernelExtensionFactories;
+ }
+
+ public Function getWatcherServiceFactory()
+ {
+ return watcherServiceFactory;
+ }
+
+ public GraphDatabaseFacade getFacade()
+ {
+ return facade;
+ }
+
+ public Iterable getEngineProviders()
+ {
+ return engineProviders;
+ }
+}