Skip to content

Commit

Permalink
Don't monitor DatabaseAvailability life to determine when to print de…
Browse files Browse the repository at this point in the history
…bug messages
  • Loading branch information
klaren committed Jun 28, 2018
1 parent 5bd579d commit dfe8bbd
Show file tree
Hide file tree
Showing 14 changed files with 73 additions and 89 deletions.
Expand Up @@ -215,7 +215,7 @@ public synchronized <T extends Lifecycle> T add( T instance )
return instance;
}

public synchronized <T extends Lifecycle> T addLast( T instance )
public synchronized <T extends Lifecycle> T setLast( T instance )
{
if ( last != null )
{
Expand Down
Expand Up @@ -519,7 +519,7 @@ void addLastComponentBeforeChain()
Lifecycle notLastComponent2 = mock( Lifecycle.class );
Lifecycle notLastComponent3 = mock( Lifecycle.class );
Lifecycle notLastComponent4 = mock( Lifecycle.class );
lifeSupport.addLast( lastComponent );
lifeSupport.setLast( lastComponent );
lifeSupport.add( notLastComponent1 );
lifeSupport.add( notLastComponent2 );
lifeSupport.add( notLastComponent3 );
Expand Down Expand Up @@ -547,7 +547,7 @@ void addLastComponentSomewhereInAChain()
Lifecycle notLastComponent4 = mock( Lifecycle.class );
lifeSupport.add( notLastComponent1 );
lifeSupport.add( notLastComponent2 );
lifeSupport.addLast( lastComponent );
lifeSupport.setLast( lastComponent );
lifeSupport.add( notLastComponent3 );
lifeSupport.add( notLastComponent4 );

Expand All @@ -567,7 +567,7 @@ void addOnlyLastComponent()
{
LifeSupport lifeSupport = newLifeSupport();
Lifecycle lastComponent = mock( Lifecycle.class );
lifeSupport.addLast( lastComponent );
lifeSupport.setLast( lastComponent );
lifeSupport.start();
List<Lifecycle> lifecycleInstances = lifeSupport.getLifecycleInstances();

Expand All @@ -581,8 +581,8 @@ void failToAddSeveralLastComponents()
LifeSupport lifeSupport = newLifeSupport();
Lifecycle lastComponent = mock( Lifecycle.class );
Lifecycle anotherLastComponent = mock( Lifecycle.class );
lifeSupport.addLast( lastComponent );
assertThrows( IllegalStateException.class, () -> lifeSupport.addLast( anotherLastComponent ) );
lifeSupport.setLast( lastComponent );
assertThrows( IllegalStateException.class, () -> lifeSupport.setLast( anotherLastComponent ) );
}

static class LifecycleMock implements Lifecycle
Expand Down
@@ -0,0 +1,47 @@
/*
* 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 <http://www.gnu.org/licenses/>.
*/
package org.neo4j.kernel;

import org.neo4j.kernel.impl.factory.DatabaseInfo;
import org.neo4j.kernel.info.DiagnosticsManager;
import org.neo4j.kernel.internal.KernelDiagnostics;
import org.neo4j.kernel.lifecycle.LifecycleAdapter;

public class DatabaseDiagnostics extends LifecycleAdapter
{
private final DiagnosticsManager diagnosticsManager;
private final NeoStoreDataSource neoStoreDataSource;
private final DatabaseInfo databaseInfo;

DatabaseDiagnostics( DiagnosticsManager diagnosticsManager, NeoStoreDataSource neoStoreDataSource, DatabaseInfo databaseInfo )
{
this.diagnosticsManager = diagnosticsManager;
this.neoStoreDataSource = neoStoreDataSource;

this.databaseInfo = databaseInfo;
}
@Override
public void start() throws Throwable
{
diagnosticsManager.prependProvider( new KernelDiagnostics.Versions( databaseInfo, neoStoreDataSource.getStoreId() ) );
neoStoreDataSource.registerDiagnosticsWith( diagnosticsManager );
diagnosticsManager.appendProvider( new KernelDiagnostics.StoreFiles( neoStoreDataSource.getStoreDir() ) );
}
}
Expand Up @@ -66,6 +66,7 @@
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.OperationalMode;
import org.neo4j.kernel.impl.index.ExplicitIndexStore;
import org.neo4j.kernel.impl.index.IndexConfigStore;
Expand Down Expand Up @@ -258,7 +259,7 @@ boolean applicable( DiagnosticsPhase phase )
private File storeDir;
private boolean readOnly;
private final IdController idController;
private final OperationalMode operationalMode;
private final DatabaseInfo databaseInfo;
private final RecoveryCleanupWorkCollector recoveryCleanupWorkCollector;
private final VersionContextSupplier versionContextSupplier;
private final AccessCapability accessCapability;
Expand All @@ -283,7 +284,7 @@ public NeoStoreDataSource( File storeDir, Config config, IdGeneratorFactory idGe
Tracers tracers, Procedures procedures, IOLimiter ioLimiter, AvailabilityGuard availabilityGuard,
SystemNanoClock clock, AccessCapability accessCapability, StoreCopyCheckPointMutex storeCopyCheckPointMutex,
RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, IdController idController,
OperationalMode operationalMode, VersionContextSupplier versionContextSupplier, CollectionsFactorySupplier collectionsFactorySupplier )
DatabaseInfo databaseInfo, VersionContextSupplier versionContextSupplier, CollectionsFactorySupplier collectionsFactorySupplier )
{
this.storeDir = storeDir;
this.config = config;
Expand Down Expand Up @@ -319,7 +320,7 @@ public NeoStoreDataSource( File storeDir, Config config, IdGeneratorFactory idGe

readOnly = config.get( GraphDatabaseSettings.read_only );
this.idController = idController;
this.operationalMode = operationalMode;
this.databaseInfo = databaseInfo;
this.versionContextSupplier = versionContextSupplier;
msgLog = logProvider.getLog( getClass() );
this.lockService = new ReentrantLockService();
Expand Down Expand Up @@ -389,7 +390,7 @@ public void start() throws IOException
idController.initialize( transactionsSnapshotSupplier );

storageEngine = buildStorageEngine( explicitIndexProvider,
indexConfigStore, databaseSchemaState, explicitIndexTransactionOrdering, operationalMode,
indexConfigStore, databaseSchemaState, explicitIndexTransactionOrdering, databaseInfo.operationalMode,
versionContextSupplier );
life.add( logFiles );

Expand Down Expand Up @@ -459,7 +460,8 @@ public void start() throws IOException
throw new RuntimeException( e );
}

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

try
{
Expand Down
Expand Up @@ -242,7 +242,6 @@ public <T, E extends Enum<E> & DiagnosticsExtractor<T>> void registerAll( Class<

public void prependProvider( DiagnosticsProvider provider )
{
@SuppressWarnings( "hiding" )
State state = this.state;
if ( state == State.STOPPED )
{
Expand Down
Expand Up @@ -25,10 +25,8 @@ public enum DiagnosticsPhase
{
REQUESTED( true, false ),
EXPLICIT( true, false ),
CREATED( false, true ),
INITIALIZED( false, true ),
STARTED( false, true ),
LOG_ROTATION( false, true ),
STOPPING( false, false ),
SHUTDOWN( false, false ), ;

Expand Down
Expand Up @@ -41,7 +41,7 @@
import org.neo4j.kernel.impl.core.DatabasePanicEventGenerator;
import org.neo4j.kernel.impl.factory.CanWrite;
import org.neo4j.kernel.impl.factory.CommunityCommitProcessFactory;
import org.neo4j.kernel.impl.factory.OperationalMode;
import org.neo4j.kernel.impl.factory.DatabaseInfo;
import org.neo4j.kernel.impl.index.IndexConfigStore;
import org.neo4j.kernel.impl.locking.Locks;
import org.neo4j.kernel.impl.locking.StatementLocks;
Expand Down Expand Up @@ -138,7 +138,7 @@ logService, mock( JobScheduler.class, RETURNS_MOCKS ), mock( TokenNameLookup.cla
RecoveryCleanupWorkCollector.IMMEDIATE,
new BufferedIdController(
new BufferingIdGeneratorFactory( idGeneratorFactory, IdReuseEligibility.ALWAYS, idConfigurationProvider ), jobScheduler ),
OperationalMode.single, new TransactionVersionContextSupplier(), ON_HEAP );
DatabaseInfo.COMMUNITY, new TransactionVersionContextSupplier(), ON_HEAP );
return dataSource;
}

Expand Down
Expand Up @@ -185,7 +185,7 @@ public GraphDatabaseFacade initFacade( File storeDir, Config config, final Depen
platform.life.add( new DatabaseAvailability( platform.availabilityGuard, platform.transactionMonitor,
config.get( GraphDatabaseSettings.shutdown_transaction_end_timeout ).toMillis() ) );
platform.life.add( new StartupWaiter( platform.availabilityGuard, edition.transactionStartTimeout ) );
platform.life.addLast( platform.eventHandlers );
platform.life.setLast( platform.eventHandlers );

Logger msgLog = platform.logging.getInternalLog( getClass() ).infoLogger();
CoreAPIAvailabilityGuard coreAPIAvailabilityGuard = edition.coreAPIAvailabilityGuard;
Expand Down
Expand Up @@ -24,14 +24,12 @@
import java.util.function.Predicate;

import org.neo4j.function.Predicates;
import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.helpers.Service;
import org.neo4j.internal.kernel.api.exceptions.KernelException;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.pagecache.IOLimiter;
import org.neo4j.io.pagecache.PageCache;
import org.neo4j.kernel.DatabaseAvailability;
import org.neo4j.kernel.api.security.AuthManager;
import org.neo4j.kernel.api.security.SecurityModule;
import org.neo4j.kernel.api.security.UserManagerSupplier;
Expand All @@ -50,7 +48,6 @@
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.DatabaseInfo;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
import org.neo4j.kernel.impl.factory.ReadOnly;
import org.neo4j.kernel.impl.index.IndexConfigStore;
Expand All @@ -72,7 +69,6 @@
import org.neo4j.kernel.internal.GraphDatabaseAPI;
import org.neo4j.kernel.internal.KernelData;
import org.neo4j.kernel.lifecycle.LifeSupport;
import org.neo4j.kernel.lifecycle.LifecycleStatus;
import org.neo4j.udc.UsageData;

/**
Expand Down Expand Up @@ -137,8 +133,6 @@ public CommunityEditionModule( PlatformModule platformModule )

ioLimiter = IOLimiter.UNLIMITED;

registerRecovery( platformModule.databaseInfo, life, dependencies );

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

dependencies.satisfyDependency( createSessionTracker() );
Expand Down Expand Up @@ -262,18 +256,6 @@ protected TransactionHeaderInformationFactory createHeaderInformationFactory()
return TransactionHeaderInformationFactory.DEFAULT;
}

private void registerRecovery( final DatabaseInfo databaseInfo, LifeSupport life,
final DependencyResolver dependencyResolver )
{
life.addLifecycleListener( ( instance, from, to ) ->
{
if ( instance instanceof DatabaseAvailability && to.equals( LifecycleStatus.STARTED ) )
{
doAfterRecoveryAndStartup( databaseInfo, dependencyResolver );
}
} );
}

@Override
public void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException
{
Expand Down
Expand Up @@ -88,7 +88,6 @@ public DataSourceModule( final PlatformModule platformModule, EditionModule edit
LogService logging = platformModule.logging;
FileSystemAbstraction fileSystem = platformModule.fileSystem;
DataSourceManager dataSourceManager = platformModule.dataSourceManager;
LifeSupport life = platformModule.life;
final GraphDatabaseFacade graphDatabaseFacade = platformModule.graphDatabaseFacade;

tokenHolders = editionModule.tokenHoldersSupplier.get();
Expand All @@ -104,7 +103,7 @@ public DataSourceModule( final PlatformModule platformModule, EditionModule edit

diagnosticsManager.prependProvider( config );

life.add( platformModule.kernelExtensions );
platformModule.life.add( platformModule.kernelExtensions );

// Factories for things that needs to be created later
PageCache pageCache = platformModule.pageCache;
Expand Down Expand Up @@ -163,7 +162,7 @@ public DataSourceModule( final PlatformModule platformModule, EditionModule edit
storeCopyCheckPointMutex,
platformModule.recoveryCleanupWorkCollector,
editionModule.idController,
platformModule.databaseInfo.operationalMode,
platformModule.databaseInfo,
platformModule.versionContextSupplier,
platformModule.collectionsFactorySupplier ) );

Expand Down
Expand Up @@ -23,15 +23,13 @@
import java.util.function.Predicate;
import java.util.function.Supplier;

import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.helpers.Service;
import org.neo4j.internal.kernel.api.exceptions.KernelException;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.fs.watcher.RestartableFileSystemWatcher;
import org.neo4j.io.pagecache.IOLimiter;
import org.neo4j.kernel.NeoStoreDataSource;
import org.neo4j.kernel.api.bolt.BoltConnectionTracker;
import org.neo4j.kernel.api.security.AuthManager;
import org.neo4j.kernel.api.security.SecurityModule;
Expand Down Expand Up @@ -62,8 +60,6 @@
import org.neo4j.kernel.impl.util.watcher.DefaultFileDeletionEventListener;
import org.neo4j.kernel.impl.util.watcher.DefaultFileSystemWatcherService;
import org.neo4j.kernel.impl.util.watcher.FileSystemWatcherService;
import org.neo4j.kernel.info.DiagnosticsManager;
import org.neo4j.kernel.internal.KernelDiagnostics;
import org.neo4j.kernel.lifecycle.LifeSupport;
import org.neo4j.logging.Log;
import org.neo4j.scheduler.JobScheduler;
Expand Down Expand Up @@ -153,17 +149,6 @@ public void registerProcedures( Procedures procedures, ProcedureConfig procedure

protected abstract void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException;

protected void doAfterRecoveryAndStartup( DatabaseInfo databaseInfo, DependencyResolver dependencyResolver )
{
DiagnosticsManager diagnosticsManager = dependencyResolver.resolveDependency( DiagnosticsManager.class );
NeoStoreDataSource neoStoreDataSource = dependencyResolver.resolveDependency( NeoStoreDataSource.class );

diagnosticsManager.prependProvider( new KernelDiagnostics.Versions(
databaseInfo, neoStoreDataSource.getStoreId() ) );
neoStoreDataSource.registerDiagnosticsWith( diagnosticsManager );
diagnosticsManager.appendProvider( new KernelDiagnostics.StoreFiles( neoStoreDataSource.getStoreDir() ) );
}

protected void publishEditionInfo( UsageData sysInfo, DatabaseInfo databaseInfo, Config config )
{
sysInfo.set( UsageDataKeys.edition, databaseInfo.edition );
Expand Down
Expand Up @@ -94,7 +94,6 @@
import org.neo4j.causalclustering.upstream.strategies.TypicallyConnectToRandomReadReplicaStrategy;
import org.neo4j.com.storecopy.StoreUtil;
import org.neo4j.function.Predicates;
import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.graphdb.factory.module.EditionModule;
import org.neo4j.graphdb.factory.module.PlatformModule;
Expand All @@ -104,7 +103,6 @@
import org.neo4j.internal.kernel.api.exceptions.KernelException;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.pagecache.PageCache;
import org.neo4j.kernel.DatabaseAvailability;
import org.neo4j.kernel.api.bolt.BoltConnectionTracker;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.configuration.ssl.SslPolicyLoader;
Expand All @@ -118,7 +116,6 @@
import org.neo4j.kernel.impl.enterprise.StandardBoltConnectionTracker;
import org.neo4j.kernel.impl.enterprise.configuration.OnlineBackupSettings;
import org.neo4j.kernel.impl.enterprise.transaction.log.checkpoint.ConfigurableIOLimiter;
import org.neo4j.kernel.impl.factory.DatabaseInfo;
import org.neo4j.kernel.impl.factory.StatementLocksFactorySelector;
import org.neo4j.kernel.impl.index.IndexConfigStore;
import org.neo4j.kernel.impl.logging.LogService;
Expand All @@ -135,7 +132,6 @@
import org.neo4j.kernel.internal.GraphDatabaseAPI;
import org.neo4j.kernel.internal.KernelData;
import org.neo4j.kernel.lifecycle.LifeSupport;
import org.neo4j.kernel.lifecycle.LifecycleStatus;
import org.neo4j.logging.LogProvider;
import org.neo4j.time.Clocks;
import org.neo4j.udc.UsageData;
Expand Down Expand Up @@ -442,8 +438,6 @@ private void editionInvariants( PlatformModule platformModule, Dependencies depe
coreAPIAvailabilityGuard =
new CoreAPIAvailabilityGuard( platformModule.availabilityGuard, transactionStartTimeout );

registerRecovery( platformModule.databaseInfo, life, dependencies );

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

dependencies.satisfyDependency( createSessionTracker() );
Expand Down Expand Up @@ -485,18 +479,6 @@ private TransactionHeaderInformationFactory createHeaderInformationFactory()
return () -> new TransactionHeaderInformation( -1, -1, new byte[0] );
}

private void registerRecovery( final DatabaseInfo databaseInfo, LifeSupport life,
final DependencyResolver dependencyResolver )
{
life.addLifecycleListener( ( instance, from, to ) ->
{
if ( instance instanceof DatabaseAvailability && LifecycleStatus.STARTED.equals( to ) )
{
doAfterRecoveryAndStartup( databaseInfo, dependencyResolver );
}
} );
}

@Override
protected BoltConnectionTracker createSessionTracker()
{
Expand Down

0 comments on commit dfe8bbd

Please sign in to comment.