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 0dc2dfa19de9..48a5d86a62de 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java @@ -262,7 +262,7 @@ public NeoStoreDataSource( DatabaseCreationContext context ) this.accessCapability = context.getAccessCapability(); this.recoveryCleanupWorkCollector = context.getRecoveryCleanupWorkCollector(); - readOnly = context.getConfig().get( GraphDatabaseSettings.read_only ); + this.readOnly = context.getConfig().get( GraphDatabaseSettings.read_only ); this.idController = context.getIdController(); this.databaseInfo = context.getDatabaseInfo(); this.versionContextSupplier = context.getVersionContextSupplier(); 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 dcdbf753c6aa..6ca51be0aa60 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 @@ -20,12 +20,15 @@ package org.neo4j.graphdb.factory.module; import java.io.File; +import java.util.function.Function; import java.util.function.Predicate; +import java.util.function.Supplier; import org.neo4j.function.Predicates; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.factory.module.id.IdContextFactory; import org.neo4j.graphdb.factory.module.id.IdContextFactoryBuilder; +import org.neo4j.internal.kernel.api.Kernel; import org.neo4j.internal.kernel.api.exceptions.KernelException; import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.io.pagecache.IOLimiter; @@ -103,10 +106,7 @@ public CommunityEditionModule( PlatformModule platformModule ) idContextFactory = createIdContextFactory( platformModule, fileSystem ); - tokenHoldersSupplier = () -> new TokenHolders( - new DelegatingTokenHolder( createPropertyKeyCreator( config, dataSourceManager ), TokenHolder.TYPE_PROPERTY_KEY ), - new DelegatingTokenHolder( createLabelIdCreator( config, dataSourceManager ), TokenHolder.TYPE_LABEL ), - new DelegatingTokenHolder( createRelationshipTypeCreator( config, dataSourceManager ), TokenHolder.TYPE_RELATIONSHIP_TYPE ) ); + tokenHoldersProvider = createTokenHolderProvider( platformModule ); File kernelContextDirectory = platformModule.storeLayout.storeDirectory(); dependencies.satisfyDependency( createKernelData( fileSystem, pageCache, kernelContextDirectory, config, life, dataSourceManager ) ); @@ -128,6 +128,16 @@ public CommunityEditionModule( PlatformModule platformModule ) publishEditionInfo( dependencies.resolveDependency( UsageData.class ), platformModule.databaseInfo, config ); } + protected Function createTokenHolderProvider( PlatformModule platform ) + { + Config config = platform.config; + DataSourceManager dataSourceManager = platform.dataSourceManager; + return ignored -> new TokenHolders( + new DelegatingTokenHolder( createPropertyKeyCreator( config, dataSourceManager ), TokenHolder.TYPE_PROPERTY_KEY ), + new DelegatingTokenHolder( createLabelIdCreator( config, dataSourceManager ), TokenHolder.TYPE_LABEL ), + new DelegatingTokenHolder( createRelationshipTypeCreator( config, dataSourceManager ), TokenHolder.TYPE_RELATIONSHIP_TYPE ) ); + } + protected IdContextFactory createIdContextFactory( PlatformModule platformModule, FileSystemAbstraction fileSystem ) { return IdContextFactoryBuilder.of( fileSystem, platformModule.jobScheduler ).build(); @@ -161,7 +171,7 @@ protected SchemaWriteGuard createSchemaWriteGuard() return SchemaWriteGuard.ALLOW_ALL_WRITES; } - private TokenCreator createRelationshipTypeCreator( Config config, DataSourceManager dataSourceManager ) + protected static TokenCreator createRelationshipTypeCreator( Config config, Supplier kernelSupplier ) { if ( config.get( GraphDatabaseSettings.read_only ) ) { @@ -169,11 +179,11 @@ private TokenCreator createRelationshipTypeCreator( Config config, DataSourceMan } else { - return new DefaultRelationshipTypeCreator( dataSourceManager ); + return new DefaultRelationshipTypeCreator( kernelSupplier ); } } - private TokenCreator createPropertyKeyCreator( Config config, DataSourceManager dataSourceManager ) + protected static TokenCreator createPropertyKeyCreator( Config config, Supplier kernelSupplier ) { if ( config.get( GraphDatabaseSettings.read_only ) ) { @@ -181,11 +191,11 @@ private TokenCreator createPropertyKeyCreator( Config config, DataSourceManager } else { - return new DefaultPropertyTokenCreator( dataSourceManager ); + return new DefaultPropertyTokenCreator( kernelSupplier ); } } - private TokenCreator createLabelIdCreator( Config config, DataSourceManager dataSourceManager ) + protected static TokenCreator createLabelIdCreator( Config config, Supplier kernelSupplier ) { if ( config.get( GraphDatabaseSettings.read_only ) ) { @@ -193,7 +203,7 @@ private TokenCreator createLabelIdCreator( Config config, DataSourceManager data } else { - return new DefaultLabelIdCreator( dataSourceManager ); + return new DefaultLabelIdCreator( kernelSupplier ); } } 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 c68fa5c1bd6e..4b35eb6025e0 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 @@ -78,7 +78,7 @@ public abstract class EditionModule { public IdContextFactory idContextFactory; - public Supplier tokenHoldersSupplier; + public Function tokenHoldersProvider; public Supplier locksSupplier; 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 52690112ea09..d24e2e6354a6 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 @@ -132,7 +132,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext this.logService = platformModule.logging; this.scheduler = platformModule.jobScheduler; this.globalDependencies = platformModule.dependencies; - this.tokenHolders = editionModule.tokenHoldersSupplier.get(); + this.tokenHolders = editionModule.tokenHoldersProvider.apply( databaseName ); this.tokenNameLookup = new NonTransactionalTokenNameLookup( tokenHolders ); this.locks = editionModule.locksSupplier.get(); this.statementLocksFactory = editionModule.statementLocksFactoryProvider.apply( locks ); 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 043f5564db68..f4758af1653b 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 @@ -309,7 +309,7 @@ public EnterpriseCoreEditionModule( final PlatformModule platformModule, .withFactoryWrapper( generator -> new FreeIdFilteredIdGeneratorFactory( generator, coreStateMachinesModule.freeIdCondition ) ).build(); // TODO: this is broken, coreStateMachinesModule.tokenHolders should be supplier, somehow... - this.tokenHoldersSupplier = () -> coreStateMachinesModule.tokenHolders; + this.tokenHoldersProvider = databaseName -> coreStateMachinesModule.tokenHolders; this.locksSupplier = coreStateMachinesModule.locksSupplier; this.commitProcessFactory = coreStateMachinesModule.commitProcessFactory; this.accessCapability = new LeaderCanWrite( consensusModule.raftMachine() ); 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 a4f8b4f483d3..43af7fb81c1f 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 @@ -182,7 +182,7 @@ public EnterpriseReadReplicaEditionModule( final PlatformModule platformModule, .withFileSystem( fileSystem ) .build(); - tokenHoldersSupplier = () -> new TokenHolders( + tokenHoldersProvider = databaseName -> new TokenHolders( new DelegatingTokenHolder( new ReadOnlyTokenCreator(), TokenHolder.TYPE_PROPERTY_KEY ), new DelegatingTokenHolder( new ReadOnlyTokenCreator(), TokenHolder.TYPE_LABEL ), new DelegatingTokenHolder( new ReadOnlyTokenCreator(), TokenHolder.TYPE_RELATIONSHIP_TYPE ) ); 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 ad1a78838fd5..bdb8a553e201 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 @@ -518,7 +518,7 @@ public void elected( String role, InstanceId instanceId, URI electedMember ) // HA will only support a single token holder tokenHolders = new TokenHolders( propertyKeyTokenHolder, labelTokenHolder, relationshipTypeTokenHolder ); - tokenHoldersSupplier = () -> tokenHolders; + tokenHoldersProvider = ignored -> tokenHolders; dependencies.satisfyDependency( createKernelData( config, platformModule.dataSourceManager, members, fs, platformModule.pageCache,