@Override public void close() throws IOException { nativeStores.close(); labelScanStore.shutdown(); } }
@Override public void shutdown() throws Throwable { indexingService.shutdown(); labelScanStore.shutdown(); neoStores.close(); }
@Test public void shutdownNonInitialisedNativeScanStoreWithoutException() throws IOException { String expectedMessage = "Expected exception message"; Monitors monitors = mock( Monitors.class ); when( monitors.newMonitor( LabelScanStore.Monitor.class ) ).thenReturn( LabelScanStore.Monitor.EMPTY ); doThrow( new RuntimeException( expectedMessage ) ).when( monitors ).addMonitorListener( any() ); LabelScanStore scanStore = getLabelScanStore( fileSystemRule.get(), testDirectory.databaseLayout(), EMPTY, true, monitors ); try { scanStore.init(); fail( "Initialisation of store should fail." ); } catch ( RuntimeException e ) { assertEquals( expectedMessage, e.getMessage() ); } scanStore.shutdown(); }
private void prepareIndex() throws IOException { start(); try ( LabelScanWriter labelScanWriter = store.newWriter() ) { labelScanWriter.write( NodeLabelUpdate.labelChanges( 1, new long[]{}, new long[]{1} ) ); } store.shutdown(); }
@Test public void scanStoreStartWithoutExistentIndex() throws Throwable { LabelScanStore labelScanStore = getLabelScanStore(); GroupingRecoveryCleanupWorkCollector workCollector = getGroupingRecoveryCleanupWorkCollector(); labelScanStore.shutdown(); workCollector.shutdown(); deleteLabelScanStoreFiles( dbRule.databaseLayout() ); workCollector.init(); labelScanStore.init(); workCollector.start(); labelScanStore.start(); checkLabelScanStoreAccessible( labelScanStore ); }
@Test public void shouldPopulateLabelScanStoreOnShutdown() throws Exception { // GIVEN // -- a database and a mocked label scan store BatchInserter inserter = newBatchInserter(); // -- and some data that we insert long node1 = inserter.createNode( null, Labels.FIRST ); long node2 = inserter.createNode( null, Labels.SECOND ); long node3 = inserter.createNode( null, Labels.THIRD ); long node4 = inserter.createNode( null, Labels.FIRST, Labels.SECOND ); long node5 = inserter.createNode( null, Labels.FIRST, Labels.THIRD ); // WHEN we shut down the batch inserter LabelScanStore labelScanStore = getLabelScanStore(); inserter.shutdown(); labelScanStore.init(); labelScanStore.start(); // THEN the label scan store should receive all the updates. // of course, we don't know the label ids at this point, but we're assuming 0..2 (bad boy) assertLabelScanStoreContains( labelScanStore, 0, node1, node4, node5 ); assertLabelScanStoreContains( labelScanStore, 1, node2, node4 ); assertLabelScanStoreContains( labelScanStore, 2, node3, node5 ); labelScanStore.shutdown(); }
@Test public void scanStoreRecreateCorruptedIndexOnStartup() throws Throwable { LabelScanStore labelScanStore = getLabelScanStore(); GroupingRecoveryCleanupWorkCollector workCollector = getGroupingRecoveryCleanupWorkCollector(); createTestNode(); long[] labels = readNodesForLabel( labelScanStore ); assertEquals( "Label scan store see 1 label for node", 1, labels.length ); labelScanStore.force( IOLimiter.UNLIMITED ); labelScanStore.shutdown(); workCollector.shutdown(); corruptLabelScanStoreFiles( dbRule.databaseLayout() ); workCollector.init(); labelScanStore.init(); workCollector.start(); labelScanStore.start(); long[] rebuildLabels = readNodesForLabel( labelScanStore ); assertArrayEquals( "Store should rebuild corrupted index", labels, rebuildLabels ); }
@Override public void close() throws IOException { nativeStores.close(); labelScanStore.shutdown(); } }
@Override public void shutdown() throws Throwable { indexingService.shutdown(); labelScanStore.shutdown(); neoStores.close(); }