@Override public Iterator<Long> iterator() { Iterator<Document> iterator = documents.iterator(); return new Iterator<Long>() { @Override public boolean hasNext() { return iterator.hasNext(); } @Override public Long next() { return entityIdReader.applyAsLong( iterator.next() ); } }; }
@Override public Iterator<Long> iterator() { if ( indexReader == null ) { indexReader = indexAccessor.newAllEntriesReader(); } return indexReader.iterator(); } }
@Override protected void scan() { long recordsPerCPU = RecordDistributor.calculateRecordsPerCpu( store.maxCount(), numberOfThreads ); cacheAccess.prepareForProcessingOfSingleStore( recordsPerCPU ); QueueDistributor<RECORD> distributor = distribution.distributor( recordsPerCPU, numberOfThreads ); distributeRecords( numberOfThreads, getClass().getSimpleName() + "-" + name, DEFAULT_QUEUE_SIZE, store.iterator(), progress, processor, distributor ); } }
private static BoundedIterable<Long> mockedAllEntriesReader( boolean knownMaxCount, List<Long> entries ) { BoundedIterable<Long> mockedAllEntriesReader = mock( BoundedIterable.class ); when( mockedAllEntriesReader.maxCount() ).thenReturn( knownMaxCount ? entries.size() : BoundedIterable.UNKNOWN_MAX_COUNT ); when( mockedAllEntriesReader.iterator() ).thenReturn( entries.iterator() ); return mockedAllEntriesReader; }
@Test void shouldProcessRecordsParallelAndUpdateProgress() throws Exception { // given ProgressMonitorFactory.MultiPartBuilder progressBuilder = mock( ProgressMonitorFactory.MultiPartBuilder.class ); ProgressListener progressListener = mock( ProgressListener.class ); when( progressBuilder.progressForPart( anyString(), anyLong() ) ).thenReturn( progressListener ); @SuppressWarnings( "unchecked" ) BoundedIterable<Integer> store = mock( BoundedIterable.class ); when( store.iterator() ).thenReturn( asList( 42, 75, 192 ).iterator() ); @SuppressWarnings( "unchecked" ) RecordProcessor<Integer> recordProcessor = mock( RecordProcessor.class ); RecordScanner<Integer> scanner = new ParallelRecordScanner<>( "our test task", Statistics.NONE, 1, store, progressBuilder, recordProcessor, CacheAccess.EMPTY, QueueDistribution.ROUND_ROBIN ); // when scanner.run(); // then verifyProcessCloseAndDone( recordProcessor, store, progressListener ); }
@Test void shouldProcessRecordsSequentiallyAndUpdateProgress() throws Exception { // given ProgressMonitorFactory.MultiPartBuilder progressBuilder = mock( ProgressMonitorFactory.MultiPartBuilder.class ); ProgressListener progressListener = mock( ProgressListener.class ); when( progressBuilder.progressForPart( anyString(), anyLong() ) ).thenReturn( progressListener ); @SuppressWarnings( "unchecked" ) BoundedIterable<Integer> store = mock( BoundedIterable.class ); when( store.iterator() ).thenReturn( asList( 42, 75, 192 ).iterator() ); @SuppressWarnings( "unchecked" ) RecordProcessor<Integer> recordProcessor = mock( RecordProcessor.class ); RecordScanner<Integer> scanner = new SequentialRecordScanner<>( "our test task", Statistics.NONE, 1, store, progressBuilder, recordProcessor ); // when scanner.run(); // then verifyProcessCloseAndDone( recordProcessor, store, progressListener ); }
@Test public void shouldScanMultipleRanges() { // GIVEN int labelId1 = 1; int labelId2 = 2; long nodeId1 = 10; long nodeId2 = 1280; start( asList( labelChanges( nodeId1, NO_LABELS, new long[]{labelId1} ), labelChanges( nodeId2, NO_LABELS, new long[]{labelId1, labelId2} ) ) ); // WHEN BoundedIterable<NodeLabelRange> reader = store.allNodeLabelRanges(); Iterator<NodeLabelRange> iterator = reader.iterator(); NodeLabelRange range1 = iterator.next(); NodeLabelRange range2 = iterator.next(); assertFalse( iterator.hasNext() ); // THEN assertArrayEquals( new long[]{nodeId1}, reducedNodes( range1 ) ); assertArrayEquals( new long[]{nodeId2}, reducedNodes( range2 ) ); assertArrayEquals( new long[]{labelId1}, sorted( range1.labels( nodeId1 ) ) ); assertArrayEquals( new long[]{labelId1, labelId2}, sorted( range2.labels( nodeId2 ) ) ); }
@Test public void shouldScanSingleRange() { // GIVEN int labelId1 = 1; int labelId2 = 2; long nodeId1 = 10; long nodeId2 = 11; start( asList( labelChanges( nodeId1, NO_LABELS, new long[]{labelId1} ), labelChanges( nodeId2, NO_LABELS, new long[]{labelId1, labelId2} ) ) ); // WHEN BoundedIterable<NodeLabelRange> reader = store.allNodeLabelRanges(); NodeLabelRange range = single( reader.iterator() ); // THEN assertArrayEquals( new long[]{nodeId1, nodeId2}, reducedNodes( range ) ); assertArrayEquals( new long[]{labelId1}, sorted( range.labels( nodeId1 ) ) ); assertArrayEquals( new long[]{labelId1, labelId2}, sorted( range.labels( nodeId2 ) ) ); }