diff --git a/community/kernel/src/main/java/org/neo4j/kernel/DatabaseCreationContext.java b/community/kernel/src/main/java/org/neo4j/kernel/DatabaseCreationContext.java index eb2af6b6aaa74..1a5a9ee892267 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/DatabaseCreationContext.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/DatabaseCreationContext.java @@ -40,6 +40,7 @@ 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.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.factory.AccessCapability; import org.neo4j.kernel.impl.factory.DatabaseInfo; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; @@ -126,6 +127,8 @@ public interface DatabaseCreationContext DatabaseAvailabilityGuard getDatabaseAvailabilityGuard(); + CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard(); + SystemNanoClock getClock(); AccessCapability getAccessCapability(); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java index 08fd394d13f92..5118b171f53e9 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java @@ -804,6 +804,11 @@ public AutoIndexing getAutoIndexing() return autoIndexing; } + public TokenHolders getTokenHolders() + { + return tokenHolders; + } + public TransactionEventHandlers getTransactionEventHandlers() { return transactionEventHandlers; diff --git a/community/kernel/src/test/java/org/neo4j/test/rule/NeoStoreDataSourceRule.java b/community/kernel/src/test/java/org/neo4j/test/rule/NeoStoreDataSourceRule.java index a068951a8ba4a..8a2efec1113ba 100644 --- a/community/kernel/src/test/java/org/neo4j/test/rule/NeoStoreDataSourceRule.java +++ b/community/kernel/src/test/java/org/neo4j/test/rule/NeoStoreDataSourceRule.java @@ -50,6 +50,7 @@ import org.neo4j.kernel.impl.context.TransactionVersionContextSupplier; import org.neo4j.kernel.impl.core.DatabasePanicEventGenerator; import org.neo4j.kernel.impl.core.TokenHolders; +import org.neo4j.kernel.impl.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.factory.AccessCapability; import org.neo4j.kernel.impl.factory.CanWrite; import org.neo4j.kernel.impl.factory.CommunityCommitProcessFactory; @@ -469,6 +470,12 @@ public DatabaseAvailabilityGuard getDatabaseAvailabilityGuard() return databaseAvailabilityGuard; } + @Override + public CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard() + { + return null; + } + @Override public SystemNanoClock getClock() { diff --git a/community/neo4j/src/main/java/org/neo4j/dmbs/database/DefaultDatabaseManager.java b/community/neo4j/src/main/java/org/neo4j/dmbs/database/DefaultDatabaseManager.java index 676146ed0b6cb..82848133b6835 100644 --- a/community/neo4j/src/main/java/org/neo4j/dmbs/database/DefaultDatabaseManager.java +++ b/community/neo4j/src/main/java/org/neo4j/dmbs/database/DefaultDatabaseManager.java @@ -64,8 +64,8 @@ public GraphDatabaseFacade createDatabase( String name ) checkState( database == null, "Database is already created, fail to create another one." ); DataSourceModule dataSource = new DataSourceModule( name, platform, edition, procedures, graphDatabaseFacade ); - ClassicCoreSPI spi = new ClassicCoreSPI( platform, dataSource, msgLog, edition.coreAPIAvailabilityGuard ); - graphDatabaseFacade.init( spi, platform.threadToTransactionBridge, platform.config, dataSource.tokenHolders ); + ClassicCoreSPI spi = new ClassicCoreSPI( platform, dataSource, msgLog, dataSource.getCoreAPIAvailabilityGuard() ); + graphDatabaseFacade.init( spi, platform.threadToTransactionBridge, platform.config, dataSource.neoStoreDataSource.getTokenHolders() ); platform.dataSourceManager.register( dataSource.neoStoreDataSource ); database = graphDatabaseFacade; return database; diff --git a/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/CommunityEditionModule.java b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/CommunityEditionModule.java index dd787becb3c87..6794609e546c6 100644 --- a/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/CommunityEditionModule.java +++ b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/CommunityEditionModule.java @@ -44,7 +44,6 @@ import org.neo4j.kernel.impl.core.TokenCreator; import org.neo4j.kernel.impl.core.TokenHolder; import org.neo4j.kernel.impl.core.TokenHolders; -import org.neo4j.kernel.impl.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.factory.CanWrite; import org.neo4j.kernel.impl.factory.CommunityCommitProcessFactory; import org.neo4j.kernel.impl.factory.ReadOnly; @@ -126,8 +125,6 @@ public CommunityEditionModule( PlatformModule platformModule ) constraintSemantics = createSchemaRuleVerifier(); - coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( platformModule.databaseAvailabilityGuard, transactionStartTimeout ); - ioLimiter = IOLimiter.UNLIMITED; connectionTracker = dependencies.satisfyDependency( createConnectionTracker() ); 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 f52c5db68d667..927f8ec578b27 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 @@ -24,7 +24,7 @@ import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.kernel.NeoStoreDataSource; import org.neo4j.kernel.api.InwardKernel; -import org.neo4j.kernel.impl.core.TokenHolders; +import org.neo4j.kernel.impl.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; import org.neo4j.kernel.impl.proc.Procedures; import org.neo4j.storageengine.api.StoreId; @@ -37,22 +37,28 @@ public class DataSourceModule public final Supplier storeId; - public final TokenHolders tokenHolders; + public final CoreAPIAvailabilityGuard coreAPIAvailabilityGuard; public DataSourceModule( String databaseName, final PlatformModule platformModule, EditionModule editionModule, Procedures procedures, GraphDatabaseFacade graphDatabaseFacade ) { - tokenHolders = editionModule.tokenHoldersSupplier.get(); platformModule.diagnosticsManager.prependProvider( platformModule.config ); - neoStoreDataSource = new NeoStoreDataSource( new ModularDatabaseCreationContext( databaseName, platformModule, editionModule, - procedures, graphDatabaseFacade, tokenHolders ) ); + ModularDatabaseCreationContext context = + new ModularDatabaseCreationContext( databaseName, platformModule, editionModule, procedures, graphDatabaseFacade ); + neoStoreDataSource = new NeoStoreDataSource( context ); + this.coreAPIAvailabilityGuard = context.getCoreAPIAvailabilityGuard(); this.storeId = neoStoreDataSource::getStoreId; this.kernelAPI = neoStoreDataSource::getKernel; - ProcedureGDSFactory gdsFactory = new ProcedureGDSFactory( platformModule, this, editionModule.coreAPIAvailabilityGuard, tokenHolders ); + ProcedureGDSFactory gdsFactory = new ProcedureGDSFactory( platformModule, this, coreAPIAvailabilityGuard, context.getTokenHolders() ); procedures.registerComponent( GraphDatabaseService.class, gdsFactory::apply, true ); } + + public CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard() + { + return coreAPIAvailabilityGuard; + } } diff --git a/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/EditionModule.java b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/EditionModule.java index e1471aca79edd..07967615b82eb 100644 --- a/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/EditionModule.java +++ b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/EditionModule.java @@ -42,7 +42,6 @@ import org.neo4j.kernel.impl.api.SchemaWriteGuard; import org.neo4j.kernel.impl.constraints.ConstraintSemantics; import org.neo4j.kernel.impl.core.TokenHolders; -import org.neo4j.kernel.impl.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.factory.AccessCapability; import org.neo4j.kernel.impl.factory.DatabaseInfo; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; @@ -106,8 +105,6 @@ public abstract class EditionModule public ConstraintSemantics constraintSemantics; - public CoreAPIAvailabilityGuard coreAPIAvailabilityGuard; - public AccessCapability accessCapability; public IOLimiter ioLimiter; 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 index a44e31b455245..bde64fa398dd9 100644 --- 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 @@ -44,6 +44,7 @@ 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.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.factory.AccessCapability; import org.neo4j.kernel.impl.factory.DatabaseInfo; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; @@ -99,6 +100,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext private final Procedures procedures; private final IOLimiter ioLimiter; private final DatabaseAvailabilityGuard databaseAvailabilityGuard; + private final CoreAPIAvailabilityGuard coreAPIAvailabilityGuard; private final SystemNanoClock clock; private final AccessCapability accessCapability; private final StoreCopyCheckPointMutex storeCopyCheckPointMutex; @@ -114,7 +116,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext private final DatabaseLayout databaseLayout; ModularDatabaseCreationContext( String databaseName, PlatformModule platformModule, EditionModule editionModule, - Procedures procedures, GraphDatabaseFacade facade, TokenHolders tokenHolders ) + Procedures procedures, GraphDatabaseFacade facade ) { this.databaseName = databaseName; this.config = platformModule.config; @@ -123,7 +125,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext this.logService = platformModule.logging; this.scheduler = platformModule.jobScheduler; this.globalDependencies = platformModule.dependencies; - this.tokenHolders = tokenHolders; + this.tokenHolders = editionModule.tokenHoldersSupplier.get(); this.tokenNameLookup = new NonTransactionalTokenNameLookup( tokenHolders ); this.locks = editionModule.locksSupplier.get(); this.statementLocksFactory = editionModule.statementLocksFactoryProvider.apply( locks ); @@ -147,6 +149,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext this.ioLimiter = editionModule.ioLimiter; this.clock = platformModule.clock; this.databaseAvailabilityGuard = new DatabaseAvailabilityGuard( databaseName, clock, logService.getInternalLog( DatabaseAvailabilityGuard.class ) ); + this.coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( databaseAvailabilityGuard, editionModule.transactionStartTimeout ); this.accessCapability = editionModule.accessCapability; this.storeCopyCheckPointMutex = new StoreCopyCheckPointMutex(); this.recoveryCleanupWorkCollector = platformModule.recoveryCleanupWorkCollector; @@ -340,6 +343,12 @@ public DatabaseAvailabilityGuard getDatabaseAvailabilityGuard() return databaseAvailabilityGuard; } + @Override + public CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard() + { + return coreAPIAvailabilityGuard; + } + @Override public SystemNanoClock getClock() { diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/EnterpriseCoreEditionModule.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/EnterpriseCoreEditionModule.java index 794fd12c443c7..66b6582b3de26 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/EnterpriseCoreEditionModule.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/EnterpriseCoreEditionModule.java @@ -111,7 +111,6 @@ import org.neo4j.kernel.enterprise.builtinprocs.EnterpriseBuiltInProcedures; import org.neo4j.kernel.impl.api.SchemaWriteGuard; import org.neo4j.kernel.impl.api.TransactionHeaderInformation; -import org.neo4j.kernel.impl.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.enterprise.EnterpriseConstraintSemantics; import org.neo4j.kernel.impl.enterprise.EnterpriseEditionModule; import org.neo4j.kernel.impl.enterprise.configuration.OnlineBackupSettings; @@ -431,9 +430,6 @@ private void editionInvariants( PlatformModule platformModule, Dependencies depe constraintSemantics = new EnterpriseConstraintSemantics(); - coreAPIAvailabilityGuard = - new CoreAPIAvailabilityGuard( platformModule.databaseAvailabilityGuard, transactionStartTimeout ); - publishEditionInfo( dependencies.resolveDependency( UsageData.class ), platformModule.databaseInfo, config ); connectionTracker = dependencies.satisfyDependency( createConnectionTracker() ); diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/readreplica/EnterpriseReadReplicaEditionModule.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/readreplica/EnterpriseReadReplicaEditionModule.java index a8fbf4feea49d..e1ae1562f7e13 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/readreplica/EnterpriseReadReplicaEditionModule.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/readreplica/EnterpriseReadReplicaEditionModule.java @@ -107,7 +107,6 @@ import org.neo4j.kernel.impl.core.ReadOnlyTokenCreator; import org.neo4j.kernel.impl.core.TokenHolder; import org.neo4j.kernel.impl.core.TokenHolders; -import org.neo4j.kernel.impl.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.enterprise.EnterpriseConstraintSemantics; import org.neo4j.kernel.impl.enterprise.EnterpriseEditionModule; import org.neo4j.kernel.impl.enterprise.configuration.OnlineBackupSettings; @@ -205,8 +204,6 @@ public EnterpriseReadReplicaEditionModule( final PlatformModule platformModule, constraintSemantics = new EnterpriseConstraintSemantics(); - coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( platformModule.databaseAvailabilityGuard, transactionStartTimeout ); - publishEditionInfo( dependencies.resolveDependency( UsageData.class ), platformModule.databaseInfo, config ); commitProcessFactory = readOnly(); diff --git a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/factory/HighlyAvailableEditionModule.java b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/factory/HighlyAvailableEditionModule.java index dbbd04c6e8064..1d8bb5f428a34 100644 --- a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/factory/HighlyAvailableEditionModule.java +++ b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/factory/HighlyAvailableEditionModule.java @@ -145,7 +145,6 @@ import org.neo4j.kernel.impl.core.TokenCreator; import org.neo4j.kernel.impl.core.TokenHolder; import org.neo4j.kernel.impl.core.TokenHolders; -import org.neo4j.kernel.impl.coreapi.CoreAPIAvailabilityGuard; import org.neo4j.kernel.impl.enterprise.EnterpriseConstraintSemantics; import org.neo4j.kernel.impl.enterprise.EnterpriseEditionModule; import org.neo4j.kernel.impl.enterprise.id.EnterpriseIdTypeConfigurationProvider; @@ -540,8 +539,6 @@ public void elected( String role, InstanceId instanceId, URI electedMember ) constraintSemantics = new EnterpriseConstraintSemantics(); - coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( platformModule.databaseAvailabilityGuard, transactionStartTimeout ); - connectionTracker = dependencies.satisfyDependency( createConnectionTracker() ); registerRecovery( platformModule.databaseInfo, dependencies, logging, platformModule );