From eafa544fd67e0c8212c0f3b4fc2aa671d81cd5d5 Mon Sep 17 00:00:00 2001 From: MishaDemianenko Date: Mon, 20 Aug 2018 16:07:12 +0200 Subject: [PATCH] Made DatabaseAvailabilityGuard database aware. Remove availability listener addition from global facade factory. --- .../BoltStateMachineFactoryImplTest.java | 5 ++- .../TransactionStateMachineV1SPITest.java | 5 ++- .../DatabaseAvailabilityGuard.java | 37 ++++++++++++++++--- .../kernel/DatabaseAvailabilityGuardTest.java | 30 +++++++++------ .../impl/api/KernelTransactionsTest.java | 8 ++-- .../test/rule/NeoStoreDataSourceRule.java | 28 +++++++------- .../facade/GraphDatabaseFacadeFactory.java | 24 ------------ .../ModularDatabaseCreationContext.java | 2 +- .../factory/module/PlatformModule.java | 3 +- .../catchup/storecopy/LocalDatabaseTest.java | 3 +- .../core/replication/RaftReplicatorTest.java | 4 +- .../kernel/ha/lock/SlaveLockManagerTest.java | 3 +- .../lock/SlaveLocksClientConcurrentTest.java | 3 +- .../kernel/ha/lock/SlaveLocksClientTest.java | 3 +- 14 files changed, 88 insertions(+), 70 deletions(-) diff --git a/community/bolt/src/test/java/org/neo4j/bolt/v1/runtime/BoltStateMachineFactoryImplTest.java b/community/bolt/src/test/java/org/neo4j/bolt/v1/runtime/BoltStateMachineFactoryImplTest.java index 09d7666c43d79..f6c153813a3ee 100644 --- a/community/bolt/src/test/java/org/neo4j/bolt/v1/runtime/BoltStateMachineFactoryImplTest.java +++ b/community/bolt/src/test/java/org/neo4j/bolt/v1/runtime/BoltStateMachineFactoryImplTest.java @@ -51,6 +51,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; class BoltStateMachineFactoryImplTest { @@ -98,7 +99,7 @@ private static BoltStateMachineFactoryImpl newBoltFactory() private static BoltStateMachineFactoryImpl newBoltFactory( DatabaseManager databaseManager ) { return new BoltStateMachineFactoryImpl( databaseManager, new UsageData( new OnDemandJobScheduler() ), - new DatabaseAvailabilityGuard( CLOCK, NullLog.getInstance() ), mock( Authentication.class ), CLOCK, Config.defaults(), + new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, CLOCK, NullLog.getInstance() ), mock( Authentication.class ), CLOCK, Config.defaults(), NullLogService.getInstance() ); } @@ -111,7 +112,7 @@ private static DatabaseManager newDbMock() when( queryService.getDependencyResolver() ).thenReturn( dependencyResolver ); when( dependencyResolver.resolveDependency( GraphDatabaseQueryService.class ) ).thenReturn( queryService ); DatabaseManager databaseManager = mock( DatabaseManager.class ); - when( databaseManager.getDatabaseFacade( DatabaseManager.DEFAULT_DATABASE_NAME ) ).thenReturn( Optional.of( db ) ); + when( databaseManager.getDatabaseFacade( DEFAULT_DATABASE_NAME ) ).thenReturn( Optional.of( db ) ); return databaseManager; } } diff --git a/community/bolt/src/test/java/org/neo4j/bolt/v1/runtime/TransactionStateMachineV1SPITest.java b/community/bolt/src/test/java/org/neo4j/bolt/v1/runtime/TransactionStateMachineV1SPITest.java index 96fd6e18eff3c..c96265ee81aaa 100644 --- a/community/bolt/src/test/java/org/neo4j/bolt/v1/runtime/TransactionStateMachineV1SPITest.java +++ b/community/bolt/src/test/java/org/neo4j/bolt/v1/runtime/TransactionStateMachineV1SPITest.java @@ -47,6 +47,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; public class TransactionStateMachineV1SPITest { @@ -61,7 +62,7 @@ public void throwsWhenTxAwaitDurationExpires() Duration txAwaitDuration = Duration.ofSeconds( 42 ); FakeClock clock = new FakeClock(); - DatabaseAvailabilityGuard databaseAvailabilityGuard = spy( new DatabaseAvailabilityGuard( clock, NullLog.getInstance() ) ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = spy( new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() ) ); when( databaseAvailabilityGuard.isAvailable() ).then( invocation -> { // move clock forward on the first availability check @@ -117,7 +118,7 @@ private static TransactionIdStore fixedTxIdStore( long lastClosedTransactionId ) private static TransactionStateMachineV1SPI createTxSpi( Supplier txIdStore, Duration txAwaitDuration, Clock clock ) { - DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, NullLog.getInstance() ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() ); return createTxSpi( txIdStore, txAwaitDuration, databaseAvailabilityGuard, clock ); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/availability/DatabaseAvailabilityGuard.java b/community/kernel/src/main/java/org/neo4j/kernel/availability/DatabaseAvailabilityGuard.java index 20937f89537d5..28a8314ee4373 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/availability/DatabaseAvailabilityGuard.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/availability/DatabaseAvailabilityGuard.java @@ -39,20 +39,23 @@ */ public class DatabaseAvailabilityGuard { - private static final String DATABASE_AVAILABLE_MSG = "Fulfilling of requirement makes database available: "; - private static final String DATABASE_UNAVAILABLE_MSG = "Requirement makes database unavailable: "; + private static final String DATABASE_AVAILABLE_MSG = "Fulfilling of requirement makes database %s available: "; + private static final String DATABASE_UNAVAILABLE_MSG = "Requirement makes database %s unavailable: "; private final AtomicInteger requirementCount = new AtomicInteger( 0 ); private final Set blockingRequirements = new CopyOnWriteArraySet<>(); private final AtomicBoolean isShutdown = new AtomicBoolean( false ); private final Listeners listeners = new Listeners<>(); + private final String databaseName; private final Clock clock; private final Log log; - public DatabaseAvailabilityGuard( Clock clock, Log log ) + public DatabaseAvailabilityGuard( String databaseName, Clock clock, Log log ) { + this.databaseName = databaseName; this.clock = clock; this.log = log; + this.listeners.add( new LoggingAvailabilityListener( log, databaseName ) ); } /** @@ -71,7 +74,7 @@ public void require( AvailabilityRequirement requirement ) { if ( requirementCount.getAndIncrement() == 0 && !isShutdown.get() ) { - log.info( DATABASE_UNAVAILABLE_MSG + requirement.description() ); + log.info( DATABASE_UNAVAILABLE_MSG + requirement.description(), databaseName ); listeners.notify( AvailabilityListener::unavailable ); } } @@ -93,7 +96,7 @@ public void fulfill( AvailabilityRequirement requirement ) { if ( requirementCount.getAndDecrement() == 1 && !isShutdown.get() ) { - log.info( DATABASE_AVAILABLE_MSG + requirement.description() ); + log.info( DATABASE_AVAILABLE_MSG + requirement.description(), databaseName ); listeners.notify( AvailabilityListener::available ); } } @@ -262,4 +265,28 @@ public String describeWhoIsBlocking() } return "No blocking components"; } + + private static class LoggingAvailabilityListener implements AvailabilityListener + { + private final Log log; + private final String databaseName; + + LoggingAvailabilityListener( Log log, String databaseName ) + { + this.log = log; + this.databaseName = databaseName; + } + + @Override + public void available() + { + log.info( "Database %s is now ready.", databaseName ); + } + + @Override + public void unavailable() + { + log.info( "Database %s is now unavailable.", databaseName ); + } + } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/DatabaseAvailabilityGuardTest.java b/community/kernel/src/test/java/org/neo4j/kernel/DatabaseAvailabilityGuardTest.java index 2ed3c39349a5d..c18b86b29b011 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/DatabaseAvailabilityGuardTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/DatabaseAvailabilityGuardTest.java @@ -48,6 +48,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; +import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; import static org.neo4j.logging.NullLog.getInstance; public class DatabaseAvailabilityGuardTest @@ -62,7 +63,7 @@ public void logOnAvailabilityChange() { // Given Log log = mock( Log.class ); - DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); // When starting out verifyZeroInteractions( log ); @@ -105,7 +106,7 @@ public void givenAccessGuardWith2ConditionsWhenAwaitThenTimeoutAndReturnFalse() { // Given Log log = mock( Log.class ); - DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); databaseAvailabilityGuard.require( REQUIREMENT_1 ); databaseAvailabilityGuard.require( REQUIREMENT_2 ); @@ -121,7 +122,7 @@ public void givenAccessGuardWith2ConditionsWhenAwaitThenActuallyWaitGivenTimeout { // Given Log log = mock( Log.class ); - DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); databaseAvailabilityGuard.require( REQUIREMENT_1 ); databaseAvailabilityGuard.require( REQUIREMENT_2 ); @@ -142,7 +143,7 @@ public void givenAccessGuardWith2ConditionsWhenGrantOnceAndAwaitThenTimeoutAndRe { // Given Log log = mock( Log.class ); - DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); databaseAvailabilityGuard.require( REQUIREMENT_1 ); databaseAvailabilityGuard.require( REQUIREMENT_2 ); @@ -165,7 +166,7 @@ public void givenAccessGuardWith2ConditionsWhenGrantEachAndAwaitThenTrue() { // Given Log log = mock( Log.class ); - DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); databaseAvailabilityGuard.require( REQUIREMENT_1 ); databaseAvailabilityGuard.require( REQUIREMENT_2 ); @@ -181,7 +182,7 @@ public void givenAccessGuardWith2ConditionsWhenGrantTwiceAndDenyOnceAndAwaitThen { // Given Log log = mock( Log.class ); - DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); databaseAvailabilityGuard.require( REQUIREMENT_1 ); databaseAvailabilityGuard.require( REQUIREMENT_2 ); @@ -206,7 +207,7 @@ public void givenAccessGuardWith2ConditionsWhenGrantOnceAndAwaitAndGrantAgainThe { // Given Log log = mock( Log.class ); - final DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + final DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); databaseAvailabilityGuard.require( REQUIREMENT_1 ); databaseAvailabilityGuard.require( REQUIREMENT_2 ); @@ -222,7 +223,7 @@ public void givenAccessGuardWithConditionWhenGrantThenNotifyListeners() { // Given Log log = mock( Log.class ); - final DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + final DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); databaseAvailabilityGuard.require( REQUIREMENT_1 ); final AtomicBoolean notified = new AtomicBoolean(); @@ -254,7 +255,7 @@ public void givenAccessGuardWithConditionWhenGrantAndDenyThenNotifyListeners() { // Given Log log = mock( Log.class ); - final DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + final DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); databaseAvailabilityGuard.require( REQUIREMENT_1 ); final AtomicBoolean notified = new AtomicBoolean(); @@ -287,7 +288,7 @@ public void givenAccessGuardWithConditionWhenShutdownThenInstantlyDenyAccess() { // Given Clock clock = Mockito.mock( Clock.class ); - final DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, NullLog.getInstance() ); + final DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, NullLog.getInstance() ); databaseAvailabilityGuard.require( REQUIREMENT_1 ); // When @@ -303,7 +304,7 @@ public void shouldExplainWhoIsBlockingAccess() { // Given Log log = mock( Log.class ); - DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, log ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( clock, log ); // When databaseAvailabilityGuard.require( REQUIREMENT_1 ); @@ -317,7 +318,7 @@ public void shouldExplainWhoIsBlockingAccess() public void shouldExplainBlockersOnCheckAvailable() throws Exception { // GIVEN - DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( Clocks.systemClock(), getInstance() ); + DatabaseAvailabilityGuard databaseAvailabilityGuard = getDatabaseAvailabilityGuard( Clocks.systemClock(), getInstance() ); // At this point it should be available databaseAvailabilityGuard.checkAvailable(); @@ -335,4 +336,9 @@ public void shouldExplainBlockersOnCheckAvailable() throws Exception assertThat( e.getMessage(), containsString( REQUIREMENT_1.description() ) ); } } + + private static DatabaseAvailabilityGuard getDatabaseAvailabilityGuard( Clock clock, Log log ) + { + return new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, log ); + } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionsTest.java index b4111a7e0f170..0fa0459386f41 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionsTest.java @@ -33,7 +33,6 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReferenceArray; -import org.neo4j.dbms.database.DatabaseManager; import org.neo4j.graphdb.DatabaseShutdownException; import org.neo4j.graphdb.security.AuthorizationExpiredException; import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException; @@ -108,6 +107,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; import static org.neo4j.helpers.collection.Iterators.asSet; import static org.neo4j.internal.kernel.api.Transaction.Type.explicit; import static org.neo4j.internal.kernel.api.security.LoginContext.AUTH_DISABLED; @@ -130,7 +130,7 @@ public class KernelTransactionsTest @Before public void setUp() { - databaseAvailabilityGuard = new DatabaseAvailabilityGuard( clock, NullLog.getInstance() ); + databaseAvailabilityGuard = new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() ); } @Test @@ -615,7 +615,7 @@ null, DEFAULT, commitProcess, null, null, new TransactionHooks(), AutoIndexing.UNSUPPORTED, mock( ExplicitIndexStore.class ), EmptyVersionContextSupplier.EMPTY, ON_HEAP, mock( ConstraintSemantics.class ), mock( SchemaState.class ), - mock( IndexingProvidersService.class), mockedTokenHolders(), DatabaseManager.DEFAULT_DATABASE_NAME, new Dependencies() ); + mock( IndexingProvidersService.class), mockedTokenHolders(), DEFAULT_DATABASE_NAME, new Dependencies() ); } private static TestKernelTransactions createTestTransactions( StorageEngine storageEngine, @@ -682,7 +682,7 @@ private static class TestKernelTransactions extends KernelTransactions transactionIdStore, clock, new AtomicReference<>( CpuClock.NOT_AVAILABLE ), new AtomicReference<>( HeapAllocation.NOT_AVAILABLE ), accessCapability, autoIndexing, mock( ExplicitIndexStore.class ), versionContextSupplier, ON_HEAP, new StandardConstraintSemantics(), mock( SchemaState.class ), - mock( IndexingProvidersService.class ), tokenHolders, DatabaseManager.DEFAULT_DATABASE_NAME, dataSourceDependencies ); + mock( IndexingProvidersService.class ), tokenHolders, DEFAULT_DATABASE_NAME, dataSourceDependencies ); } @Override 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 5e9448b4cc11d..a068951a8ba4a 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 @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.function.Function; -import org.neo4j.dbms.database.DatabaseManager; import org.neo4j.graphdb.DependencyResolver; import org.neo4j.helpers.collection.Iterables; import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; @@ -94,6 +93,7 @@ import static org.mockito.Mockito.RETURNS_MOCKS; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; import static org.neo4j.kernel.impl.util.collection.CollectionsFactorySupplier.ON_HEAP; import static org.neo4j.kernel.impl.util.watcher.FileSystemWatcherService.EMPTY_WATCHER; import static org.neo4j.test.MockedNeoStores.mockedTokenHolders; @@ -138,23 +138,23 @@ public NeoStoreDataSource getDataSource( DatabaseLayout databaseLayout, FileSyst TransactionMonitor transactionMonitor = dependency( mutableDependencies, TransactionMonitor.class, deps -> new DatabaseTransactionStats() ); DatabaseAvailabilityGuard databaseAvailabilityGuard = dependency( mutableDependencies, DatabaseAvailabilityGuard.class, - deps -> new DatabaseAvailabilityGuard( deps.resolveDependency( SystemNanoClock.class ), NullLog.getInstance() ) ); + deps -> new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, deps.resolveDependency( SystemNanoClock.class ), + NullLog.getInstance() ) ); dependency( mutableDependencies, DiagnosticsManager.class, deps -> new DiagnosticsManager( NullLog.getInstance() ) ); dependency( mutableDependencies, IndexProvider.class, deps -> IndexProvider.EMPTY ); - dataSource = new NeoStoreDataSource( - new TestDatabaseCreationContext( DatabaseManager.DEFAULT_DATABASE_NAME, databaseLayout, config, idGeneratorFactory, logService, - mock( JobScheduler.class, RETURNS_MOCKS ), mock( TokenNameLookup.class ), mutableDependencies, mockedTokenHolders(), locksFactory, - mock( SchemaWriteGuard.class ), mock( TransactionEventHandlers.class ), IndexingService.NO_MONITOR, fs, transactionMonitor, - databaseHealth, mock( LogFileCreationMonitor.class ), TransactionHeaderInformationFactory.DEFAULT, new CommunityCommitProcessFactory(), - mock( InternalAutoIndexing.class ), mock( IndexConfigStore.class ), mock( ExplicitIndexProvider.class ), pageCache, - new StandardConstraintSemantics(), monitors, new Tracers( "null", NullLog.getInstance(), monitors, jobScheduler, clock ), - mock( Procedures.class ), IOLimiter.UNLIMITED, databaseAvailabilityGuard, clock, new CanWrite(), new StoreCopyCheckPointMutex(), - RecoveryCleanupWorkCollector.immediate(), - new BufferedIdController( new BufferingIdGeneratorFactory( idGeneratorFactory, IdReuseEligibility.ALWAYS, idConfigurationProvider ), - jobScheduler ), DatabaseInfo.COMMUNITY, new TransactionVersionContextSupplier(), ON_HEAP, Collections.emptyList(), - file -> EMPTY_WATCHER, new GraphDatabaseFacade(), Iterables.empty() ) ); + dataSource = new NeoStoreDataSource( new TestDatabaseCreationContext( DEFAULT_DATABASE_NAME, databaseLayout, config, idGeneratorFactory, logService, + mock( JobScheduler.class, RETURNS_MOCKS ), mock( TokenNameLookup.class ), mutableDependencies, mockedTokenHolders(), locksFactory, + mock( SchemaWriteGuard.class ), mock( TransactionEventHandlers.class ), IndexingService.NO_MONITOR, fs, transactionMonitor, databaseHealth, + mock( LogFileCreationMonitor.class ), TransactionHeaderInformationFactory.DEFAULT, new CommunityCommitProcessFactory(), + mock( InternalAutoIndexing.class ), mock( IndexConfigStore.class ), mock( ExplicitIndexProvider.class ), pageCache, + new StandardConstraintSemantics(), monitors, new Tracers( "null", NullLog.getInstance(), monitors, jobScheduler, clock ), + mock( Procedures.class ), IOLimiter.UNLIMITED, databaseAvailabilityGuard, clock, new CanWrite(), new StoreCopyCheckPointMutex(), + RecoveryCleanupWorkCollector.immediate(), + new BufferedIdController( new BufferingIdGeneratorFactory( idGeneratorFactory, IdReuseEligibility.ALWAYS, idConfigurationProvider ), + jobScheduler ), DatabaseInfo.COMMUNITY, new TransactionVersionContextSupplier(), ON_HEAP, Collections.emptyList(), + file -> EMPTY_WATCHER, new GraphDatabaseFacade(), Iterables.empty() ) ); 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 549065beaab41..88310b1cbd51a 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 @@ -39,9 +39,7 @@ import org.neo4j.internal.kernel.api.exceptions.KernelException; import org.neo4j.internal.kernel.api.security.SecurityContext; import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.availability.AvailabilityListener; import org.neo4j.kernel.availability.DatabaseAvailability; -import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.StartupWaiter; import org.neo4j.kernel.builtinprocs.SpecialBuiltInProcedures; import org.neo4j.kernel.configuration.Config; @@ -198,10 +196,6 @@ public GraphDatabaseFacade initFacade( File storeDir, Config config, final Depen RuntimeException error = null; try { - // Done after create to avoid a redundant - // "database is now unavailable" - enableAvailabilityLogging( platform.databaseAvailabilityGuard, msgLog ); - platform.life.start(); } catch ( final Throwable throwable ) @@ -241,24 +235,6 @@ protected PlatformModule createPlatform( File storeDir, Config config, final Dep return new PlatformModule( storeDir, config, databaseInfo, dependencies ); } - private void enableAvailabilityLogging( DatabaseAvailabilityGuard databaseAvailabilityGuard, final Logger msgLog ) - { - databaseAvailabilityGuard.addListener( new AvailabilityListener() - { - @Override - public void available() - { - msgLog.log( "Database is now ready" ); - } - - @Override - public void unavailable() - { - msgLog.log( "Database is now unavailable" ); - } - } ); - } - private static Procedures setupProcedures( PlatformModule platform, EditionModule editionModule, GraphDatabaseFacade facade ) { File pluginDir = platform.config.get( GraphDatabaseSettings.plugin_dir ); 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 e6caf26f28214..a44e31b455245 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 @@ -145,8 +145,8 @@ public class ModularDatabaseCreationContext implements DatabaseCreationContext this.tracers = platformModule.tracers; this.procedures = procedures; this.ioLimiter = editionModule.ioLimiter; - this.databaseAvailabilityGuard = platformModule.databaseAvailabilityGuard; this.clock = platformModule.clock; + this.databaseAvailabilityGuard = new DatabaseAvailabilityGuard( databaseName, clock, logService.getInternalLog( DatabaseAvailabilityGuard.class ) ); this.accessCapability = editionModule.accessCapability; this.storeCopyCheckPointMutex = new StoreCopyCheckPointMutex(); this.recoveryCleanupWorkCollector = platformModule.recoveryCleanupWorkCollector; diff --git a/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/PlatformModule.java b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/PlatformModule.java index 4d42858f16a60..aedfa0e1ef665 100644 --- a/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/PlatformModule.java +++ b/community/neo4j/src/main/java/org/neo4j/graphdb/factory/module/PlatformModule.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.IOException; +import org.neo4j.dbms.database.DatabaseManager; import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.security.URLAccessRule; @@ -238,7 +239,7 @@ protected VersionContextSupplier createCursorContextSupplier( Config config ) protected DatabaseAvailabilityGuard createAvailabilityGuard() { - return new DatabaseAvailabilityGuard( clock, logging.getInternalLog( DatabaseAvailabilityGuard.class ) ); + return new DatabaseAvailabilityGuard( DatabaseManager.DEFAULT_DATABASE_NAME, clock, logging.getInternalLog( DatabaseAvailabilityGuard.class ) ); } protected StoreLocker createStoreLocker() diff --git a/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/catchup/storecopy/LocalDatabaseTest.java b/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/catchup/storecopy/LocalDatabaseTest.java index 3afd0c18f8261..06741c64dd536 100644 --- a/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/catchup/storecopy/LocalDatabaseTest.java +++ b/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/catchup/storecopy/LocalDatabaseTest.java @@ -47,6 +47,7 @@ import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; public class LocalDatabaseTest { @@ -166,7 +167,7 @@ private static LocalDatabase newLocalDatabase( DatabaseAvailabilityGuard databas private static DatabaseAvailabilityGuard newAvailabilityGuard() { - return new DatabaseAvailabilityGuard( Clock.systemUTC(), NullLog.getInstance() ); + return new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, Clock.systemUTC(), NullLog.getInstance() ); } private static void assertDatabaseIsStoppedAndUnavailable( DatabaseAvailabilityGuard guard ) diff --git a/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/core/replication/RaftReplicatorTest.java b/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/core/replication/RaftReplicatorTest.java index df26a417ac3c1..5d64c0daca68a 100644 --- a/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/core/replication/RaftReplicatorTest.java +++ b/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/core/replication/RaftReplicatorTest.java @@ -65,6 +65,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; import static org.neo4j.test.assertion.Assert.assertEventually; public class RaftReplicatorTest @@ -82,7 +83,8 @@ public class RaftReplicatorTest private GlobalSession session = new GlobalSession( UUID.randomUUID(), myself ); private LocalSessionPool sessionPool = new LocalSessionPool( session ); private TimeoutStrategy noWaitTimeoutStrategy = new ConstantTimeTimeoutStrategy( 0, MILLISECONDS ); - private DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( Clocks.systemClock(), NullLog.getInstance() ); + private DatabaseAvailabilityGuard databaseAvailabilityGuard = + new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, Clocks.systemClock(), NullLog.getInstance() ); @Test public void shouldSendReplicatedContentToLeader() throws Exception diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLockManagerTest.java b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLockManagerTest.java index 340853cb4da99..d021cf6af116c 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLockManagerTest.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLockManagerTest.java @@ -41,6 +41,7 @@ import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; import static org.neo4j.function.Suppliers.singleton; import static org.neo4j.logging.NullLog.getInstance; @@ -55,7 +56,7 @@ public void setUp() { requestContextFactory = new RequestContextFactory( 1, singleton( mock( TransactionIdStore.class ) ) ); master = mock( Master.class ); - databaseAvailabilityGuard = new DatabaseAvailabilityGuard( Clocks.systemClock(), getInstance() ); + databaseAvailabilityGuard = new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, Clocks.systemClock(), getInstance() ); } @Test diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLocksClientConcurrentTest.java b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLocksClientConcurrentTest.java index eeee819714db8..7a20f205e48c4 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLocksClientConcurrentTest.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLocksClientConcurrentTest.java @@ -37,6 +37,7 @@ import org.neo4j.com.RequestContext; import org.neo4j.com.Response; +import org.neo4j.dbms.database.DatabaseManager; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.ha.com.RequestContextFactory; @@ -82,7 +83,7 @@ public void setUp() master = mock( Master.class, new LockedOnMasterAnswer() ); lockManager = new ForsetiLockManager( Config.defaults(), Clocks.systemClock(), ResourceTypes.values() ); requestContextFactory = mock( RequestContextFactory.class ); - databaseAvailabilityGuard = new DatabaseAvailabilityGuard( Clocks.systemClock(), mock( Log.class ) ); + databaseAvailabilityGuard = new DatabaseAvailabilityGuard( DatabaseManager.DEFAULT_DATABASE_NAME, Clocks.systemClock(), mock( Log.class ) ); when( requestContextFactory.newRequestContext( Mockito.anyInt() ) ) .thenReturn( RequestContext.anonymous( 1 ) ); diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLocksClientTest.java b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLocksClientTest.java index 5d0717a1260f2..5c32d1370f6a8 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLocksClientTest.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/lock/SlaveLocksClientTest.java @@ -70,6 +70,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import static org.neo4j.com.ResourceReleaser.NO_OP; +import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; import static org.neo4j.kernel.impl.locking.ResourceTypes.NODE; import static org.neo4j.logging.AssertableLogProvider.inLog; import static org.neo4j.logging.NullLog.getInstance; @@ -88,7 +89,7 @@ public class SlaveLocksClientTest public void setUp() { master = mock( Master.class ); - databaseAvailabilityGuard = new DatabaseAvailabilityGuard( Clocks.fakeClock(), getInstance() ); + databaseAvailabilityGuard = new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, Clocks.fakeClock(), getInstance() ); lockManager = new CommunityLockManger( Config.defaults(), Clocks.systemClock() ); local = spy( lockManager.newClient() );