diff --git a/community/common/src/main/java/org/neo4j/kernel/lifecycle/LifeSupport.java b/community/common/src/main/java/org/neo4j/kernel/lifecycle/LifeSupport.java index ec93cf9c907f4..70ae0f797df82 100644 --- a/community/common/src/main/java/org/neo4j/kernel/lifecycle/LifeSupport.java +++ b/community/common/src/main/java/org/neo4j/kernel/lifecycle/LifeSupport.java @@ -215,7 +215,7 @@ public synchronized T add( T instance ) return instance; } - public synchronized T addLast( T instance ) + public synchronized T setLast( T instance ) { if ( last != null ) { diff --git a/community/common/src/test/java/org/neo4j/kernel/lifecycle/LifeSupportTest.java b/community/common/src/test/java/org/neo4j/kernel/lifecycle/LifeSupportTest.java index acd6feb39407e..a073ae0288fd6 100644 --- a/community/common/src/test/java/org/neo4j/kernel/lifecycle/LifeSupportTest.java +++ b/community/common/src/test/java/org/neo4j/kernel/lifecycle/LifeSupportTest.java @@ -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 ); @@ -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 ); @@ -567,7 +567,7 @@ void addOnlyLastComponent() { LifeSupport lifeSupport = newLifeSupport(); Lifecycle lastComponent = mock( Lifecycle.class ); - lifeSupport.addLast( lastComponent ); + lifeSupport.setLast( lastComponent ); lifeSupport.start(); List lifecycleInstances = lifeSupport.getLifecycleInstances(); @@ -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 diff --git a/community/kernel/src/main/java/org/neo4j/kernel/DatabaseDiagnostics.java b/community/kernel/src/main/java/org/neo4j/kernel/DatabaseDiagnostics.java new file mode 100644 index 0000000000000..2b560e869d2d7 --- /dev/null +++ b/community/kernel/src/main/java/org/neo4j/kernel/DatabaseDiagnostics.java @@ -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 . + */ +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() ) ); + } +} 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 f36c134ab26d8..c77ef253f006f 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java @@ -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; @@ -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; @@ -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; @@ -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(); @@ -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 ); @@ -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 { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/info/DiagnosticsManager.java b/community/kernel/src/main/java/org/neo4j/kernel/info/DiagnosticsManager.java index 935f7ae2d2fb4..47b9b9c7f0d06 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/info/DiagnosticsManager.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/info/DiagnosticsManager.java @@ -242,7 +242,6 @@ public & DiagnosticsExtractor> void registerAll( Class< public void prependProvider( DiagnosticsProvider provider ) { - @SuppressWarnings( "hiding" ) State state = this.state; if ( state == State.STOPPED ) { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/info/DiagnosticsPhase.java b/community/kernel/src/main/java/org/neo4j/kernel/info/DiagnosticsPhase.java index 01a1160a11fa8..aec7290698d0f 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/info/DiagnosticsPhase.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/info/DiagnosticsPhase.java @@ -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 ), ; 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 1c2b684bd045c..9de3b704b49d1 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 @@ -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; @@ -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; } diff --git a/community/neo4j/src/main/java/org/neo4j/graphdb/facade/GraphDatabaseFacadeFactory.java b/community/neo4j/src/main/java/org/neo4j/graphdb/facade/GraphDatabaseFacadeFactory.java index dc64d19746f38..008260fefad6f 100644 --- a/community/neo4j/src/main/java/org/neo4j/graphdb/facade/GraphDatabaseFacadeFactory.java +++ b/community/neo4j/src/main/java/org/neo4j/graphdb/facade/GraphDatabaseFacadeFactory.java @@ -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; 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 a938fa958f5fe..255abdbb5f2e0 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 @@ -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; @@ -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; @@ -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; /** @@ -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() ); @@ -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 { 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 1ca3d5cf74351..fced206b55f5b 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 @@ -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(); @@ -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; @@ -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 ) ); 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 88ac6e73df32b..f308df874863c 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 @@ -23,7 +23,6 @@ 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; @@ -31,7 +30,6 @@ 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; @@ -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; @@ -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 ); 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 5067b0f789614..2fa440e7ea993 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 @@ -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; @@ -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; @@ -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; @@ -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; @@ -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() ); @@ -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() { 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 2fc62c227df11..ad119f1b7f3f4 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 @@ -85,14 +85,12 @@ import org.neo4j.causalclustering.upstream.strategies.ConnectToRandomCoreServerStrategy; 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; 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; @@ -112,7 +110,6 @@ import org.neo4j.kernel.impl.enterprise.configuration.OnlineBackupSettings; import org.neo4j.kernel.impl.enterprise.id.EnterpriseIdTypeConfigurationProvider; import org.neo4j.kernel.impl.enterprise.transaction.log.checkpoint.ConfigurableIOLimiter; -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.factory.StatementLocksFactorySelector; @@ -134,7 +131,6 @@ import org.neo4j.kernel.internal.DatabaseHealth; 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.storageengine.api.StorageEngine; import org.neo4j.time.Clocks; @@ -203,8 +199,6 @@ public EnterpriseReadReplicaEditionModule( final PlatformModule platformModule, coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( platformModule.availabilityGuard, transactionStartTimeout ); - registerRecovery( platformModule.databaseInfo, life, dependencies ); - publishEditionInfo( dependencies.resolveDependency( UsageData.class ), platformModule.databaseInfo, config ); commitProcessFactory = readOnly(); @@ -388,17 +382,6 @@ public void registerEditionSpecificProcedures( Procedures procedures ) throws Ke procedures.register( new ReadReplicaRoleProcedure() ); } - 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 ); - } - } ); - } - private CommitProcessFactory readOnly() { return ( appender, storageEngine, config ) -> new ReadOnlyTransactionCommitProcess(); 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 54fc43c5da4d1..ade5159d100bc 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 @@ -171,8 +171,10 @@ import org.neo4j.kernel.impl.transaction.log.entry.LogEntryReader; import org.neo4j.kernel.impl.transaction.log.files.TransactionLogFiles; import org.neo4j.kernel.impl.util.Dependencies; +import org.neo4j.kernel.info.DiagnosticsManager; import org.neo4j.kernel.internal.GraphDatabaseAPI; import org.neo4j.kernel.internal.KernelData; +import org.neo4j.kernel.internal.KernelDiagnostics; import org.neo4j.kernel.lifecycle.LifeSupport; import org.neo4j.kernel.lifecycle.Lifecycle; import org.neo4j.kernel.monitoring.ByteCounterMonitor; @@ -811,7 +813,12 @@ private void doAfterRecoveryAndStartup() { try { - HighlyAvailableEditionModule.this.doAfterRecoveryAndStartup( databaseInfo, 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() ) ); assureLastCommitTimestampInitialized( dependencyResolver ); } catch ( Throwable throwable )