Skip to content

Commit

Permalink
Move DatabasseAvailability to database level.
Browse files Browse the repository at this point in the history
  • Loading branch information
MishaDemianenko committed Aug 24, 2018
1 parent 378c839 commit cba5a00
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 19 deletions.
Expand Up @@ -31,6 +31,7 @@
import org.neo4j.io.pagecache.PageCache; import org.neo4j.io.pagecache.PageCache;
import org.neo4j.io.pagecache.tracing.cursor.context.VersionContextSupplier; import org.neo4j.io.pagecache.tracing.cursor.context.VersionContextSupplier;
import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.api.explicitindex.AutoIndexing;
import org.neo4j.kernel.availability.DatabaseAvailability;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.extension.KernelExtensionFactory; import org.neo4j.kernel.extension.KernelExtensionFactory;
Expand Down Expand Up @@ -97,7 +98,7 @@ public interface DatabaseCreationContext


FileSystemAbstraction getFs(); FileSystemAbstraction getFs();


TransactionMonitor getTransactionMonitor(); TransactionMonitor getTransactionStats();


DatabaseHealth getDatabaseHealth(); DatabaseHealth getDatabaseHealth();


Expand Down Expand Up @@ -152,4 +153,6 @@ public interface DatabaseCreationContext
GraphDatabaseFacade getFacade(); GraphDatabaseFacade getFacade();


Iterable<QueryEngineProvider> getEngineProviders(); Iterable<QueryEngineProvider> getEngineProviders();

DatabaseAvailability getDatabaseAvailability();
} }
Expand Up @@ -45,6 +45,7 @@
import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.api.explicitindex.AutoIndexing;
import org.neo4j.kernel.api.index.NodePropertyAccessor; import org.neo4j.kernel.api.index.NodePropertyAccessor;
import org.neo4j.kernel.api.labelscan.LabelScanStore; import org.neo4j.kernel.api.labelscan.LabelScanStore;
import org.neo4j.kernel.availability.DatabaseAvailability;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.extension.DatabaseKernelExtensions; import org.neo4j.kernel.extension.DatabaseKernelExtensions;
Expand Down Expand Up @@ -199,6 +200,11 @@ public class NeoStoreDataSource extends LifecycleAdapter
private final StoreCopyCheckPointMutex storeCopyCheckPointMutex; private final StoreCopyCheckPointMutex storeCopyCheckPointMutex;
private final CollectionsFactorySupplier collectionsFactorySupplier; private final CollectionsFactorySupplier collectionsFactorySupplier;
private final Locks locks; private final Locks locks;
private final DatabaseAvailability databaseAvailability;

private Dependencies dataSourceDependencies;
private LifeSupport life;
private IndexProviderMap indexProviderMap;
private final String databaseName; private final String databaseName;
private final DatabaseLayout databaseLayout; private final DatabaseLayout databaseLayout;
private final boolean readOnly; private final boolean readOnly;
Expand All @@ -208,10 +214,6 @@ public class NeoStoreDataSource extends LifecycleAdapter
private final VersionContextSupplier versionContextSupplier; private final VersionContextSupplier versionContextSupplier;
private final AccessCapability accessCapability; private final AccessCapability accessCapability;


private Dependencies dataSourceDependencies;
private LifeSupport life;
private IndexProviderMap indexProviderMap;

private StorageEngine storageEngine; private StorageEngine storageEngine;
private QueryExecutionEngine executionEngine; private QueryExecutionEngine executionEngine;
private NeoStoreTransactionLogModule transactionLogModule; private NeoStoreTransactionLogModule transactionLogModule;
Expand Down Expand Up @@ -244,7 +246,7 @@ public NeoStoreDataSource( DatabaseCreationContext context )
this.transactionEventHandlers = context.getTransactionEventHandlers(); this.transactionEventHandlers = context.getTransactionEventHandlers();
this.indexingServiceMonitor = context.getIndexingServiceMonitor(); this.indexingServiceMonitor = context.getIndexingServiceMonitor();
this.fs = context.getFs(); this.fs = context.getFs();
this.transactionMonitor = context.getTransactionMonitor(); this.transactionMonitor = context.getTransactionStats();
this.databaseHealth = context.getDatabaseHealth(); this.databaseHealth = context.getDatabaseHealth();
this.physicalLogMonitor = context.getPhysicalLogMonitor(); this.physicalLogMonitor = context.getPhysicalLogMonitor();
this.transactionHeaderInformationFactory = context.getTransactionHeaderInformationFactory(); this.transactionHeaderInformationFactory = context.getTransactionHeaderInformationFactory();
Expand Down Expand Up @@ -272,6 +274,7 @@ public NeoStoreDataSource( DatabaseCreationContext context )
this.pageCache = context.getPageCache(); this.pageCache = context.getPageCache();
this.monitors.addMonitorListener( new LoggingLogFileMonitor( msgLog ) ); this.monitors.addMonitorListener( new LoggingLogFileMonitor( msgLog ) );
this.collectionsFactorySupplier = context.getCollectionsFactorySupplier(); this.collectionsFactorySupplier = context.getCollectionsFactorySupplier();
this.databaseAvailability = context.getDatabaseAvailability();
this.failOnCorruptedLogFiles = context.getConfig().get( GraphDatabaseSettings.fail_on_corrupted_log_files ); this.failOnCorruptedLogFiles = context.getConfig().get( GraphDatabaseSettings.fail_on_corrupted_log_files );
} }


Expand All @@ -293,6 +296,7 @@ public void start() throws IOException
dataSourceDependencies.satisfyDependency( transactionMonitor ); dataSourceDependencies.satisfyDependency( transactionMonitor );
dataSourceDependencies.satisfyDependency( locks ); dataSourceDependencies.satisfyDependency( locks );
dataSourceDependencies.satisfyDependency( databaseAvailabilityGuard ); dataSourceDependencies.satisfyDependency( databaseAvailabilityGuard );
dataSourceDependencies.satisfyDependency( databaseAvailability );


life = new LifeSupport(); life = new LifeSupport();
dataSourceDependencies.satisfyDependency( explicitIndexProvider ); dataSourceDependencies.satisfyDependency( explicitIndexProvider );
Expand Down Expand Up @@ -410,6 +414,7 @@ public void start() throws IOException
} }


life.add( new DatabaseDiagnostics( dataSourceDependencies.resolveDependency( DiagnosticsManager.class ), this, databaseInfo ) ); life.add( new DatabaseDiagnostics( dataSourceDependencies.resolveDependency( DiagnosticsManager.class ), this, databaseInfo ) );
life.add( databaseAvailability );
life.setLast( lifecycleToTriggerCheckPointOnShutdown() ); life.setLast( lifecycleToTriggerCheckPointOnShutdown() );


try try
Expand Down
Expand Up @@ -37,6 +37,7 @@
import org.neo4j.kernel.NeoStoreDataSource; import org.neo4j.kernel.NeoStoreDataSource;
import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.api.explicitindex.AutoIndexing;
import org.neo4j.kernel.api.index.IndexProvider; import org.neo4j.kernel.api.index.IndexProvider;
import org.neo4j.kernel.availability.DatabaseAvailability;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.extension.KernelExtensionFactory; import org.neo4j.kernel.extension.KernelExtensionFactory;
Expand Down Expand Up @@ -381,7 +382,7 @@ public FileSystemAbstraction getFs()
} }


@Override @Override
public TransactionMonitor getTransactionMonitor() public TransactionMonitor getTransactionStats()
{ {
return transactionMonitor; return transactionMonitor;
} }
Expand Down Expand Up @@ -547,6 +548,12 @@ public Iterable<QueryEngineProvider> getEngineProviders()
{ {
return engineProviders; return engineProviders;
} }

@Override
public DatabaseAvailability getDatabaseAvailability()
{
return null;
}
} }


} }
Expand Up @@ -39,7 +39,6 @@
import org.neo4j.internal.kernel.api.exceptions.KernelException; import org.neo4j.internal.kernel.api.exceptions.KernelException;
import org.neo4j.internal.kernel.api.security.SecurityContext; import org.neo4j.internal.kernel.api.security.SecurityContext;
import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.KernelTransaction;
import org.neo4j.kernel.availability.DatabaseAvailability;
import org.neo4j.kernel.availability.StartupWaiter; import org.neo4j.kernel.availability.StartupWaiter;
import org.neo4j.kernel.builtinprocs.SpecialBuiltInProcedures; import org.neo4j.kernel.builtinprocs.SpecialBuiltInProcedures;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
Expand Down Expand Up @@ -178,11 +177,6 @@ public GraphDatabaseFacade initFacade( File storeDir, Config config, final Depen
platform.life.add( new VmPauseMonitorComponent( config, platform.logging.getInternalLog( VmPauseMonitorComponent.class ), platform.jobScheduler ) ); platform.life.add( new VmPauseMonitorComponent( config, platform.logging.getInternalLog( VmPauseMonitorComponent.class ), platform.jobScheduler ) );
platform.dependencies.satisfyDependency( edition.globalTransactionCounter() ); platform.dependencies.satisfyDependency( edition.globalTransactionCounter() );
platform.life.add( new PublishPageCacheTracerMetricsAfterStart( platform.tracers.pageCursorTracerSupplier ) ); platform.life.add( new PublishPageCacheTracerMetricsAfterStart( platform.tracers.pageCursorTracerSupplier ) );
DatabaseAvailability databaseAvailability =
new DatabaseAvailability( platform.databaseAvailabilityGuard, edition.globalTransactionCounter(), platform.clock,
config.get( GraphDatabaseSettings.shutdown_transaction_end_timeout ).toMillis() );
platform.dependencies.satisfyDependency( databaseAvailability );
platform.life.add( databaseAvailability );
platform.life.add( new StartupWaiter( platform.databaseAvailabilityGuard, edition.transactionStartTimeout ) ); platform.life.add( new StartupWaiter( platform.databaseAvailabilityGuard, edition.transactionStartTimeout ) );
platform.dependencies.satisfyDependency( edition.schemaWriteGuard ); platform.dependencies.satisfyDependency( edition.schemaWriteGuard );
platform.life.setLast( platform.eventHandlers ); platform.life.setLast( platform.eventHandlers );
Expand Down
Expand Up @@ -58,7 +58,6 @@
import org.neo4j.kernel.impl.store.id.IdReuseEligibility; import org.neo4j.kernel.impl.store.id.IdReuseEligibility;
import org.neo4j.kernel.impl.store.id.configuration.IdTypeConfigurationProvider; import org.neo4j.kernel.impl.store.id.configuration.IdTypeConfigurationProvider;
import org.neo4j.kernel.impl.transaction.TransactionHeaderInformationFactory; import org.neo4j.kernel.impl.transaction.TransactionHeaderInformationFactory;
import org.neo4j.kernel.impl.transaction.TransactionMonitor;
import org.neo4j.kernel.impl.transaction.stats.DatabaseTransactionStats; import org.neo4j.kernel.impl.transaction.stats.DatabaseTransactionStats;
import org.neo4j.kernel.impl.transaction.stats.TransactionCounters; import org.neo4j.kernel.impl.transaction.stats.TransactionCounters;
import org.neo4j.kernel.impl.util.Dependencies; import org.neo4j.kernel.impl.util.Dependencies;
Expand Down Expand Up @@ -280,7 +279,7 @@ public void createDatabases( DatabaseManager databaseManager, Config config )
databaseManager.createDatabase( config.get( GraphDatabaseSettings.active_database ) ); databaseManager.createDatabase( config.get( GraphDatabaseSettings.active_database ) );
} }


public TransactionMonitor createTransactionMonitor() public DatabaseTransactionStats createTransactionMonitor()
{ {
return databaseStatistics; return databaseStatistics;
} }
Expand Down
Expand Up @@ -23,6 +23,7 @@
import java.util.function.Function; import java.util.function.Function;


import org.neo4j.graphdb.DependencyResolver; import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector;
import org.neo4j.internal.kernel.api.TokenNameLookup; import org.neo4j.internal.kernel.api.TokenNameLookup;
import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.io.fs.FileSystemAbstraction;
Expand All @@ -32,6 +33,7 @@
import org.neo4j.io.pagecache.tracing.cursor.context.VersionContextSupplier; import org.neo4j.io.pagecache.tracing.cursor.context.VersionContextSupplier;
import org.neo4j.kernel.DatabaseCreationContext; import org.neo4j.kernel.DatabaseCreationContext;
import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.api.explicitindex.AutoIndexing;
import org.neo4j.kernel.availability.DatabaseAvailability;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.extension.KernelExtensionFactory; import org.neo4j.kernel.extension.KernelExtensionFactory;
Expand Down Expand Up @@ -60,6 +62,7 @@
import org.neo4j.kernel.impl.transaction.TransactionMonitor; import org.neo4j.kernel.impl.transaction.TransactionMonitor;
import org.neo4j.kernel.impl.transaction.log.checkpoint.StoreCopyCheckPointMutex; import org.neo4j.kernel.impl.transaction.log.checkpoint.StoreCopyCheckPointMutex;
import org.neo4j.kernel.impl.transaction.log.files.LogFileCreationMonitor; import org.neo4j.kernel.impl.transaction.log.files.LogFileCreationMonitor;
import org.neo4j.kernel.impl.transaction.stats.DatabaseTransactionStats;
import org.neo4j.kernel.impl.util.collection.CollectionsFactorySupplier; import org.neo4j.kernel.impl.util.collection.CollectionsFactorySupplier;
import org.neo4j.kernel.impl.util.watcher.FileSystemWatcherService; import org.neo4j.kernel.impl.util.watcher.FileSystemWatcherService;
import org.neo4j.kernel.internal.DatabaseHealth; import org.neo4j.kernel.internal.DatabaseHealth;
Expand All @@ -85,7 +88,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext
private final TransactionEventHandlers transactionEventHandlers; private final TransactionEventHandlers transactionEventHandlers;
private final IndexingService.Monitor indexingServiceMonitor; private final IndexingService.Monitor indexingServiceMonitor;
private final FileSystemAbstraction fs; private final FileSystemAbstraction fs;
private final TransactionMonitor transactionMonitor; private final DatabaseTransactionStats transactionStats;
private final DatabaseHealth databaseHealth; private final DatabaseHealth databaseHealth;
private final LogFileCreationMonitor physicalLogMonitor; private final LogFileCreationMonitor physicalLogMonitor;
private final TransactionHeaderInformationFactory transactionHeaderInformationFactory; private final TransactionHeaderInformationFactory transactionHeaderInformationFactory;
Expand Down Expand Up @@ -114,6 +117,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext
private final GraphDatabaseFacade facade; private final GraphDatabaseFacade facade;
private final Iterable<QueryEngineProvider> engineProviders; private final Iterable<QueryEngineProvider> engineProviders;
private final DatabaseLayout databaseLayout; private final DatabaseLayout databaseLayout;
private final DatabaseAvailability databaseAvailability;


ModularDatabaseCreationContext( String databaseName, PlatformModule platformModule, EditionModule editionModule, ModularDatabaseCreationContext( String databaseName, PlatformModule platformModule, EditionModule editionModule,
Procedures procedures, GraphDatabaseFacade facade ) Procedures procedures, GraphDatabaseFacade facade )
Expand All @@ -135,7 +139,7 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext
this.indexingServiceMonitor = monitors.newMonitor( IndexingService.Monitor.class ); this.indexingServiceMonitor = monitors.newMonitor( IndexingService.Monitor.class );
this.physicalLogMonitor = monitors.newMonitor( LogFileCreationMonitor.class ); this.physicalLogMonitor = monitors.newMonitor( LogFileCreationMonitor.class );
this.fs = platformModule.fileSystem; this.fs = platformModule.fileSystem;
this.transactionMonitor = editionModule.createTransactionMonitor(); this.transactionStats = editionModule.createTransactionMonitor();
this.databaseHealth = new DatabaseHealth( platformModule.panicEventGenerator, logService.getInternalLog( DatabaseHealth.class ) ); this.databaseHealth = new DatabaseHealth( platformModule.panicEventGenerator, logService.getInternalLog( DatabaseHealth.class ) );
this.transactionHeaderInformationFactory = editionModule.headerInformationFactory; this.transactionHeaderInformationFactory = editionModule.headerInformationFactory;
this.commitProcessFactory = editionModule.commitProcessFactory; this.commitProcessFactory = editionModule.commitProcessFactory;
Expand All @@ -149,6 +153,8 @@ 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.databaseAvailability =
new DatabaseAvailability( databaseAvailabilityGuard, transactionStats, platformModule.clock, getAwaitActiveTransactionDeadlineMillis() );
this.coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( databaseAvailabilityGuard, editionModule.transactionStartTimeout ); this.coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( databaseAvailabilityGuard, editionModule.transactionStartTimeout );
this.accessCapability = editionModule.accessCapability; this.accessCapability = editionModule.accessCapability;
this.storeCopyCheckPointMutex = new StoreCopyCheckPointMutex(); this.storeCopyCheckPointMutex = new StoreCopyCheckPointMutex();
Expand Down Expand Up @@ -254,9 +260,9 @@ public FileSystemAbstraction getFs()
} }


@Override @Override
public TransactionMonitor getTransactionMonitor() public TransactionMonitor getTransactionStats()
{ {
return transactionMonitor; return transactionStats;
} }


@Override @Override
Expand Down Expand Up @@ -420,4 +426,15 @@ public Iterable<QueryEngineProvider> getEngineProviders()
{ {
return engineProviders; return engineProviders;
} }

@Override
public DatabaseAvailability getDatabaseAvailability()
{
return databaseAvailability;
}

private long getAwaitActiveTransactionDeadlineMillis()
{
return config.get( GraphDatabaseSettings.shutdown_transaction_end_timeout ).toMillis();
}
} }

0 comments on commit cba5a00

Please sign in to comment.