Skip to content

Commit

Permalink
Move CoreAPiAvailability guard from edition to datasource.
Browse files Browse the repository at this point in the history
  • Loading branch information
MishaDemianenko committed Aug 24, 2018
1 parent eafa544 commit 844a2f4
Show file tree
Hide file tree
Showing 11 changed files with 40 additions and 26 deletions.
Expand Up @@ -40,6 +40,7 @@
import org.neo4j.kernel.impl.api.index.IndexingService; import org.neo4j.kernel.impl.api.index.IndexingService;
import org.neo4j.kernel.impl.constraints.ConstraintSemantics; import org.neo4j.kernel.impl.constraints.ConstraintSemantics;
import org.neo4j.kernel.impl.core.TokenHolders; 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.AccessCapability;
import org.neo4j.kernel.impl.factory.DatabaseInfo; import org.neo4j.kernel.impl.factory.DatabaseInfo;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
Expand Down Expand Up @@ -126,6 +127,8 @@ public interface DatabaseCreationContext


DatabaseAvailabilityGuard getDatabaseAvailabilityGuard(); DatabaseAvailabilityGuard getDatabaseAvailabilityGuard();


CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard();

SystemNanoClock getClock(); SystemNanoClock getClock();


AccessCapability getAccessCapability(); AccessCapability getAccessCapability();
Expand Down
Expand Up @@ -804,6 +804,11 @@ public AutoIndexing getAutoIndexing()
return autoIndexing; return autoIndexing;
} }


public TokenHolders getTokenHolders()
{
return tokenHolders;
}

public TransactionEventHandlers getTransactionEventHandlers() public TransactionEventHandlers getTransactionEventHandlers()
{ {
return transactionEventHandlers; return transactionEventHandlers;
Expand Down
Expand Up @@ -50,6 +50,7 @@
import org.neo4j.kernel.impl.context.TransactionVersionContextSupplier; import org.neo4j.kernel.impl.context.TransactionVersionContextSupplier;
import org.neo4j.kernel.impl.core.DatabasePanicEventGenerator; import org.neo4j.kernel.impl.core.DatabasePanicEventGenerator;
import org.neo4j.kernel.impl.core.TokenHolders; 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.AccessCapability;
import org.neo4j.kernel.impl.factory.CanWrite; import org.neo4j.kernel.impl.factory.CanWrite;
import org.neo4j.kernel.impl.factory.CommunityCommitProcessFactory; import org.neo4j.kernel.impl.factory.CommunityCommitProcessFactory;
Expand Down Expand Up @@ -469,6 +470,12 @@ public DatabaseAvailabilityGuard getDatabaseAvailabilityGuard()
return databaseAvailabilityGuard; return databaseAvailabilityGuard;
} }


@Override
public CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard()
{
return null;
}

@Override @Override
public SystemNanoClock getClock() public SystemNanoClock getClock()
{ {
Expand Down
Expand Up @@ -64,8 +64,8 @@ public GraphDatabaseFacade createDatabase( String name )
checkState( database == null, "Database is already created, fail to create another one." ); checkState( database == null, "Database is already created, fail to create another one." );


DataSourceModule dataSource = new DataSourceModule( name, platform, edition, procedures, graphDatabaseFacade ); DataSourceModule dataSource = new DataSourceModule( name, platform, edition, procedures, graphDatabaseFacade );
ClassicCoreSPI spi = new ClassicCoreSPI( platform, dataSource, msgLog, edition.coreAPIAvailabilityGuard ); ClassicCoreSPI spi = new ClassicCoreSPI( platform, dataSource, msgLog, dataSource.getCoreAPIAvailabilityGuard() );
graphDatabaseFacade.init( spi, platform.threadToTransactionBridge, platform.config, dataSource.tokenHolders ); graphDatabaseFacade.init( spi, platform.threadToTransactionBridge, platform.config, dataSource.neoStoreDataSource.getTokenHolders() );
platform.dataSourceManager.register( dataSource.neoStoreDataSource ); platform.dataSourceManager.register( dataSource.neoStoreDataSource );
database = graphDatabaseFacade; database = graphDatabaseFacade;
return database; return database;
Expand Down
Expand Up @@ -44,7 +44,6 @@
import org.neo4j.kernel.impl.core.TokenCreator; import org.neo4j.kernel.impl.core.TokenCreator;
import org.neo4j.kernel.impl.core.TokenHolder; import org.neo4j.kernel.impl.core.TokenHolder;
import org.neo4j.kernel.impl.core.TokenHolders; 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.CanWrite;
import org.neo4j.kernel.impl.factory.CommunityCommitProcessFactory; import org.neo4j.kernel.impl.factory.CommunityCommitProcessFactory;
import org.neo4j.kernel.impl.factory.ReadOnly; import org.neo4j.kernel.impl.factory.ReadOnly;
Expand Down Expand Up @@ -126,8 +125,6 @@ public CommunityEditionModule( PlatformModule platformModule )


constraintSemantics = createSchemaRuleVerifier(); constraintSemantics = createSchemaRuleVerifier();


coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( platformModule.databaseAvailabilityGuard, transactionStartTimeout );

ioLimiter = IOLimiter.UNLIMITED; ioLimiter = IOLimiter.UNLIMITED;


connectionTracker = dependencies.satisfyDependency( createConnectionTracker() ); connectionTracker = dependencies.satisfyDependency( createConnectionTracker() );
Expand Down
Expand Up @@ -24,7 +24,7 @@
import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.kernel.NeoStoreDataSource; import org.neo4j.kernel.NeoStoreDataSource;
import org.neo4j.kernel.api.InwardKernel; 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.factory.GraphDatabaseFacade;
import org.neo4j.kernel.impl.proc.Procedures; import org.neo4j.kernel.impl.proc.Procedures;
import org.neo4j.storageengine.api.StoreId; import org.neo4j.storageengine.api.StoreId;
Expand All @@ -37,22 +37,28 @@ public class DataSourceModule


public final Supplier<StoreId> storeId; public final Supplier<StoreId> storeId;


public final TokenHolders tokenHolders; public final CoreAPIAvailabilityGuard coreAPIAvailabilityGuard;


public DataSourceModule( String databaseName, final PlatformModule platformModule, EditionModule editionModule, Procedures procedures, public DataSourceModule( String databaseName, final PlatformModule platformModule, EditionModule editionModule, Procedures procedures,
GraphDatabaseFacade graphDatabaseFacade ) GraphDatabaseFacade graphDatabaseFacade )
{ {
tokenHolders = editionModule.tokenHoldersSupplier.get();


platformModule.diagnosticsManager.prependProvider( platformModule.config ); platformModule.diagnosticsManager.prependProvider( platformModule.config );


neoStoreDataSource = new NeoStoreDataSource( new ModularDatabaseCreationContext( databaseName, platformModule, editionModule, ModularDatabaseCreationContext context =
procedures, graphDatabaseFacade, tokenHolders ) ); new ModularDatabaseCreationContext( databaseName, platformModule, editionModule, procedures, graphDatabaseFacade );
neoStoreDataSource = new NeoStoreDataSource( context );


this.coreAPIAvailabilityGuard = context.getCoreAPIAvailabilityGuard();
this.storeId = neoStoreDataSource::getStoreId; this.storeId = neoStoreDataSource::getStoreId;
this.kernelAPI = neoStoreDataSource::getKernel; 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 ); procedures.registerComponent( GraphDatabaseService.class, gdsFactory::apply, true );
} }

public CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard()
{
return coreAPIAvailabilityGuard;
}
} }
Expand Up @@ -42,7 +42,6 @@
import org.neo4j.kernel.impl.api.SchemaWriteGuard; import org.neo4j.kernel.impl.api.SchemaWriteGuard;
import org.neo4j.kernel.impl.constraints.ConstraintSemantics; import org.neo4j.kernel.impl.constraints.ConstraintSemantics;
import org.neo4j.kernel.impl.core.TokenHolders; 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.AccessCapability;
import org.neo4j.kernel.impl.factory.DatabaseInfo; import org.neo4j.kernel.impl.factory.DatabaseInfo;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
Expand Down Expand Up @@ -106,8 +105,6 @@ public abstract class EditionModule


public ConstraintSemantics constraintSemantics; public ConstraintSemantics constraintSemantics;


public CoreAPIAvailabilityGuard coreAPIAvailabilityGuard;

public AccessCapability accessCapability; public AccessCapability accessCapability;


public IOLimiter ioLimiter; public IOLimiter ioLimiter;
Expand Down
Expand Up @@ -44,6 +44,7 @@
import org.neo4j.kernel.impl.api.index.IndexingService; import org.neo4j.kernel.impl.api.index.IndexingService;
import org.neo4j.kernel.impl.constraints.ConstraintSemantics; import org.neo4j.kernel.impl.constraints.ConstraintSemantics;
import org.neo4j.kernel.impl.core.TokenHolders; 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.AccessCapability;
import org.neo4j.kernel.impl.factory.DatabaseInfo; import org.neo4j.kernel.impl.factory.DatabaseInfo;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
Expand Down Expand Up @@ -99,6 +100,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext
private final Procedures procedures; private final Procedures procedures;
private final IOLimiter ioLimiter; private final IOLimiter ioLimiter;
private final DatabaseAvailabilityGuard databaseAvailabilityGuard; private final DatabaseAvailabilityGuard databaseAvailabilityGuard;
private final CoreAPIAvailabilityGuard coreAPIAvailabilityGuard;
private final SystemNanoClock clock; private final SystemNanoClock clock;
private final AccessCapability accessCapability; private final AccessCapability accessCapability;
private final StoreCopyCheckPointMutex storeCopyCheckPointMutex; private final StoreCopyCheckPointMutex storeCopyCheckPointMutex;
Expand All @@ -114,7 +116,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext
private final DatabaseLayout databaseLayout; private final DatabaseLayout databaseLayout;


ModularDatabaseCreationContext( String databaseName, PlatformModule platformModule, EditionModule editionModule, ModularDatabaseCreationContext( String databaseName, PlatformModule platformModule, EditionModule editionModule,
Procedures procedures, GraphDatabaseFacade facade, TokenHolders tokenHolders ) Procedures procedures, GraphDatabaseFacade facade )
{ {
this.databaseName = databaseName; this.databaseName = databaseName;
this.config = platformModule.config; this.config = platformModule.config;
Expand All @@ -123,7 +125,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext
this.logService = platformModule.logging; this.logService = platformModule.logging;
this.scheduler = platformModule.jobScheduler; this.scheduler = platformModule.jobScheduler;
this.globalDependencies = platformModule.dependencies; this.globalDependencies = platformModule.dependencies;
this.tokenHolders = tokenHolders; this.tokenHolders = editionModule.tokenHoldersSupplier.get();
this.tokenNameLookup = new NonTransactionalTokenNameLookup( tokenHolders ); this.tokenNameLookup = new NonTransactionalTokenNameLookup( tokenHolders );
this.locks = editionModule.locksSupplier.get(); this.locks = editionModule.locksSupplier.get();
this.statementLocksFactory = editionModule.statementLocksFactoryProvider.apply( locks ); this.statementLocksFactory = editionModule.statementLocksFactoryProvider.apply( locks );
Expand All @@ -147,6 +149,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext
this.ioLimiter = editionModule.ioLimiter; this.ioLimiter = editionModule.ioLimiter;
this.clock = platformModule.clock; this.clock = platformModule.clock;
this.databaseAvailabilityGuard = new DatabaseAvailabilityGuard( databaseName, clock, logService.getInternalLog( DatabaseAvailabilityGuard.class ) ); this.databaseAvailabilityGuard = new DatabaseAvailabilityGuard( databaseName, clock, logService.getInternalLog( DatabaseAvailabilityGuard.class ) );
this.coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( databaseAvailabilityGuard, editionModule.transactionStartTimeout );
this.accessCapability = editionModule.accessCapability; this.accessCapability = editionModule.accessCapability;
this.storeCopyCheckPointMutex = new StoreCopyCheckPointMutex(); this.storeCopyCheckPointMutex = new StoreCopyCheckPointMutex();
this.recoveryCleanupWorkCollector = platformModule.recoveryCleanupWorkCollector; this.recoveryCleanupWorkCollector = platformModule.recoveryCleanupWorkCollector;
Expand Down Expand Up @@ -340,6 +343,12 @@ public DatabaseAvailabilityGuard getDatabaseAvailabilityGuard()
return databaseAvailabilityGuard; return databaseAvailabilityGuard;
} }


@Override
public CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard()
{
return coreAPIAvailabilityGuard;
}

@Override @Override
public SystemNanoClock getClock() public SystemNanoClock getClock()
{ {
Expand Down
Expand Up @@ -111,7 +111,6 @@
import org.neo4j.kernel.enterprise.builtinprocs.EnterpriseBuiltInProcedures; import org.neo4j.kernel.enterprise.builtinprocs.EnterpriseBuiltInProcedures;
import org.neo4j.kernel.impl.api.SchemaWriteGuard; import org.neo4j.kernel.impl.api.SchemaWriteGuard;
import org.neo4j.kernel.impl.api.TransactionHeaderInformation; 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.EnterpriseConstraintSemantics;
import org.neo4j.kernel.impl.enterprise.EnterpriseEditionModule; import org.neo4j.kernel.impl.enterprise.EnterpriseEditionModule;
import org.neo4j.kernel.impl.enterprise.configuration.OnlineBackupSettings; import org.neo4j.kernel.impl.enterprise.configuration.OnlineBackupSettings;
Expand Down Expand Up @@ -431,9 +430,6 @@ private void editionInvariants( PlatformModule platformModule, Dependencies depe


constraintSemantics = new EnterpriseConstraintSemantics(); constraintSemantics = new EnterpriseConstraintSemantics();


coreAPIAvailabilityGuard =
new CoreAPIAvailabilityGuard( platformModule.databaseAvailabilityGuard, transactionStartTimeout );

publishEditionInfo( dependencies.resolveDependency( UsageData.class ), platformModule.databaseInfo, config ); publishEditionInfo( dependencies.resolveDependency( UsageData.class ), platformModule.databaseInfo, config );


connectionTracker = dependencies.satisfyDependency( createConnectionTracker() ); connectionTracker = dependencies.satisfyDependency( createConnectionTracker() );
Expand Down
Expand Up @@ -107,7 +107,6 @@
import org.neo4j.kernel.impl.core.ReadOnlyTokenCreator; import org.neo4j.kernel.impl.core.ReadOnlyTokenCreator;
import org.neo4j.kernel.impl.core.TokenHolder; import org.neo4j.kernel.impl.core.TokenHolder;
import org.neo4j.kernel.impl.core.TokenHolders; 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.EnterpriseConstraintSemantics;
import org.neo4j.kernel.impl.enterprise.EnterpriseEditionModule; import org.neo4j.kernel.impl.enterprise.EnterpriseEditionModule;
import org.neo4j.kernel.impl.enterprise.configuration.OnlineBackupSettings; import org.neo4j.kernel.impl.enterprise.configuration.OnlineBackupSettings;
Expand Down Expand Up @@ -205,8 +204,6 @@ public EnterpriseReadReplicaEditionModule( final PlatformModule platformModule,


constraintSemantics = new EnterpriseConstraintSemantics(); constraintSemantics = new EnterpriseConstraintSemantics();


coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( platformModule.databaseAvailabilityGuard, transactionStartTimeout );

publishEditionInfo( dependencies.resolveDependency( UsageData.class ), platformModule.databaseInfo, config ); publishEditionInfo( dependencies.resolveDependency( UsageData.class ), platformModule.databaseInfo, config );
commitProcessFactory = readOnly(); commitProcessFactory = readOnly();


Expand Down
Expand Up @@ -145,7 +145,6 @@
import org.neo4j.kernel.impl.core.TokenCreator; import org.neo4j.kernel.impl.core.TokenCreator;
import org.neo4j.kernel.impl.core.TokenHolder; import org.neo4j.kernel.impl.core.TokenHolder;
import org.neo4j.kernel.impl.core.TokenHolders; 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.EnterpriseConstraintSemantics;
import org.neo4j.kernel.impl.enterprise.EnterpriseEditionModule; import org.neo4j.kernel.impl.enterprise.EnterpriseEditionModule;
import org.neo4j.kernel.impl.enterprise.id.EnterpriseIdTypeConfigurationProvider; import org.neo4j.kernel.impl.enterprise.id.EnterpriseIdTypeConfigurationProvider;
Expand Down Expand Up @@ -540,8 +539,6 @@ public void elected( String role, InstanceId instanceId, URI electedMember )


constraintSemantics = new EnterpriseConstraintSemantics(); constraintSemantics = new EnterpriseConstraintSemantics();


coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( platformModule.databaseAvailabilityGuard, transactionStartTimeout );

connectionTracker = dependencies.satisfyDependency( createConnectionTracker() ); connectionTracker = dependencies.satisfyDependency( createConnectionTracker() );


registerRecovery( platformModule.databaseInfo, dependencies, logging, platformModule ); registerRecovery( platformModule.databaseInfo, dependencies, logging, platformModule );
Expand Down

0 comments on commit 844a2f4

Please sign in to comment.