@Override public long maxCount() { return nodeLabelRanges.maxCount(); }
@Override public void close() throws Exception { nodeLabelRanges.close(); }
private static void assertRanges( AllEntriesLabelScanReader reader, Labels[] data ) { Iterator<NodeLabelRange> iterator = reader.iterator(); long highestRangeId = highestRangeId( data ); for ( long rangeId = 0; rangeId <= highestRangeId; rangeId++ ) { SortedMap<Long/*nodeId*/,List<Long>/*labelIds*/> expected = rangeOf( data, rangeId ); if ( expected != null ) { assertTrue( "Was expecting range " + expected, iterator.hasNext() ); NodeLabelRange range = iterator.next(); assertEquals( rangeId, range.id() ); for ( Map.Entry<Long,List<Long>> expectedEntry : expected.entrySet() ) { long[] labels = range.labels( expectedEntry.getKey() ); assertArrayEquals( asArray( expectedEntry.getValue().iterator() ), labels ); } } // else there was nothing in this range } assertFalse( iterator.hasNext() ); }
@Override public int rangeSize() { return nodeLabelRanges.rangeSize(); }
@Test public void shouldSeeEntriesWhenOnlyLowestIsPresent() { // given long labelId = 0; List<NodeLabelUpdate> labelUpdates = new ArrayList<>(); labelUpdates.add( NodeLabelUpdate.labelChanges( 0L, new long[]{}, new long[]{labelId} ) ); start( labelUpdates ); // when MutableInt count = new MutableInt(); AllEntriesLabelScanReader nodeLabelRanges = store.allNodeLabelRanges(); nodeLabelRanges.forEach( nlr -> { for ( long nodeId : nlr.nodes() ) { count.add( nlr.labels( nodeId ).length ); } } ); assertThat( count.intValue(), is( 1 ) ); }
@Test public void visitOnlyLabeledNodes() throws Exception { LabelScanReader labelScanReader = mock( LabelScanReader.class ); when( labelScanStore.newReader() ).thenReturn( labelScanReader ); when( nodeLabelRanges.maxCount() ).thenReturn( 1L ); PrimitiveLongResourceIterator labeledNodesIterator = PrimitiveLongResourceCollections.iterator( null, 1, 2, 3, 4, 5, 6, 7, 8 ); when( nodeStore.getHighestPossibleIdInUse() ).thenReturn( 200L ); when( nodeStore.getHighId() ).thenReturn( 20L ); when( labelScanReader.nodesWithAnyOfLabels( new int[] {2, 6} ) ).thenReturn( labeledNodesIterator ); when( nodeStore.openPageCursorForReading( anyLong() ) ).thenReturn( mock( PageCursor.class ) ); mockLabelNodeCount( countStore, 2 ); mockLabelNodeCount( countStore, 6 ); DynamicIndexStoreView storeView = dynamicIndexStoreView(); StoreScan<Exception> storeScan = storeView .visitNodes( new int[]{2, 6}, propertyKeyIdFilter, propertyUpdateVisitor, labelUpdateVisitor, false ); storeScan.run(); Mockito.verify( nodeStore, times( 8 ) ) .getRecordByCursor( anyLong(), any( NodeRecord.class ), any( RecordLoad.class ), any( PageCursor.class ) ); }