@Test void skipTransactionWithoutTimeout() { HashSet<KernelTransactionHandle> transactions = new HashSet<>(); KernelTransactionImplementation tx1 = prepareTxMock( 7, 3, 0 ); KernelTransactionImplementation tx2 = prepareTxMock( 8, 4, 0 ); KernelTransactionImplementationHandle handle1 = new KernelTransactionImplementationHandle( tx1, fakeClock ); KernelTransactionImplementationHandle handle2 = new KernelTransactionImplementationHandle( tx2, fakeClock ); transactions.add( handle1 ); transactions.add( handle2 ); when( kernelTransactions.activeTransactions()).thenReturn( transactions ); KernelTransactionMonitor transactionMonitor = buildTransactionMonitor(); fakeClock.forward( 300, TimeUnit.MILLISECONDS ); transactionMonitor.run(); verify( tx1, never() ).markForTermination( Status.Transaction.TransactionTimedOut ); verify( tx2, never() ).markForTermination( Status.Transaction.TransactionTimedOut ); logProvider.assertNoMessagesContaining( "timeout" ); }
@Test public void databaseWithCriticalErrorsCanNotBeHealed() { AssertableLogProvider logProvider = new AssertableLogProvider(); DatabaseHealth databaseHealth = new DatabaseHealth( mock( DatabasePanicEventGenerator.class ), logProvider.getLog( DatabaseHealth.class ) ); assertTrue( databaseHealth.isHealthy() ); IOException criticalException = new IOException( "Space exception.", new OutOfMemoryError( "Out of memory." ) ); databaseHealth.panic( criticalException ); assertFalse( databaseHealth.isHealthy() ); assertFalse( databaseHealth.healed() ); logProvider.assertNoMessagesContaining( "Database health set to OK" ); logProvider.assertContainsLogCallContaining( "Database encountered a critical error and can't be healed. Restart required." ); } }
@Test void terminateExpiredTransactions() { HashSet<KernelTransactionHandle> transactions = new HashSet<>(); KernelTransactionImplementation tx1 = prepareTxMock( 3, 1, 3 ); KernelTransactionImplementation tx2 = prepareTxMock( 4, 1, 8 ); KernelTransactionImplementationHandle handle1 = new KernelTransactionImplementationHandle( tx1, fakeClock ); KernelTransactionImplementationHandle handle2 = new KernelTransactionImplementationHandle( tx2, fakeClock ); transactions.add( handle1 ); transactions.add( handle2 ); when( kernelTransactions.activeTransactions()).thenReturn( transactions ); KernelTransactionMonitor transactionMonitor = buildTransactionMonitor(); fakeClock.forward( 3, TimeUnit.MILLISECONDS ); transactionMonitor.run(); verify( tx1, never() ).markForTermination( Status.Transaction.TransactionTimedOut ); verify( tx2, never() ).markForTermination( Status.Transaction.TransactionTimedOut ); logProvider.assertNoMessagesContaining( "timeout" ); fakeClock.forward( 2, TimeUnit.MILLISECONDS ); transactionMonitor.run(); verify( tx1 ).markForTermination( EXPECTED_REUSE_COUNT, Status.Transaction.TransactionTimedOut ); verify( tx2, never() ).markForTermination( Status.Transaction.TransactionTimedOut ); logProvider.assertContainsLogCallContaining( "timeout" ); logProvider.clear(); fakeClock.forward( 10, TimeUnit.MILLISECONDS ); transactionMonitor.run(); verify( tx2 ).markForTermination( EXPECTED_REUSE_COUNT, Status.Transaction.TransactionTimedOut ); logProvider.assertContainsLogCallContaining( "timeout" ); }
@Test public void shouldNotLogWhenNoDeprecatedIndexesOnInit() throws IOException { // given StoreIndexDescriptor nativeBtree10Index = storeIndex( 5, 1, 5, nativeBtree10Descriptor ); StoreIndexDescriptor fulltextIndex = storeIndex( 6, 1, 6, fulltextDescriptor ); IndexProvider lucene10Provider = mockIndexProviderWithAccessor( lucene10Descriptor ); IndexProvider native10Provider = mockIndexProviderWithAccessor( native10Descriptor ); IndexProvider native20Provider = mockIndexProviderWithAccessor( native20Descriptor ); IndexProvider nativeBtree10Provider = mockIndexProviderWithAccessor( nativeBtree10Descriptor ); IndexProvider fulltextProvider = mockIndexProviderWithAccessor( fulltextDescriptor ); when( nativeBtree10Provider.getInitialState( nativeBtree10Index ) ).thenReturn( ONLINE ); when( fulltextProvider.getInitialState( fulltextIndex ) ).thenReturn( ONLINE ); Config config = Config.defaults( default_schema_provider, nativeBtree10Descriptor.name() ); DependencyResolver dependencies = buildIndexDependencies( lucene10Provider, native10Provider, native20Provider, nativeBtree10Provider ); DefaultIndexProviderMap providerMap = new DefaultIndexProviderMap( dependencies, config ); providerMap.init(); TokenNameLookup mockLookup = mock( TokenNameLookup.class ); IndexingService indexingService = IndexingServiceFactory.createIndexingService( config, mock( JobScheduler.class ), providerMap, storeView, mockLookup, Collections.singletonList( nativeBtree10Index ),internalLogProvider, userLogProvider, IndexingService.NO_MONITOR, schemaState ); // when indexingService.init(); // then onBothLogProviders( logProvider -> logProvider.assertNoMessagesContaining( "IndexingService.init: Deprecated index providers in use:" ) ); onBothLogProviders( logProvider -> internalLogProvider.assertNoMessagesContaining( nativeBtree10Descriptor.name() ) ); onBothLogProviders( logProvider -> internalLogProvider.assertNoMessagesContaining( fulltextDescriptor.name() ) ); }
onBothLogProviders( logProvider -> internalLogProvider.assertNoMessagesContaining( "IndexingService.start: Deprecated index providers in use:" ) ); onBothLogProviders( logProvider -> internalLogProvider.assertNoMessagesContaining( nativeBtree10Descriptor.name() ) ); onBothLogProviders( logProvider -> internalLogProvider.assertNoMessagesContaining( fulltextDescriptor.name() ) );
onBothLogProviders( logProvider -> internalLogProvider.assertNoMessagesContaining( nativeBtree10Descriptor.name() ) ); onBothLogProviders( logProvider -> internalLogProvider.assertNoMessagesContaining( fulltextDescriptor.name() ) ); userLogProvider.print( System.out );
@Test public void healDatabaseWithoutCriticalErrors() { AssertableLogProvider logProvider = new AssertableLogProvider(); DatabaseHealth databaseHealth = new DatabaseHealth( mock( DatabasePanicEventGenerator.class ), logProvider.getLog( DatabaseHealth.class ) ); assertTrue( databaseHealth.isHealthy() ); databaseHealth.panic( new IOException( "Space exception." ) ); assertFalse( databaseHealth.isHealthy() ); assertTrue( databaseHealth.healed() ); logProvider.assertContainsLogCallContaining( "Database health set to OK" ); logProvider.assertNoMessagesContaining( "Database encountered a critical error and can't be healed. Restart required." ); }