@Override public IndexReader newReader() { return accessor.newReader(); }
@Override public IndexReader newReader() { return delegate.newReader(); }
@Override public IndexReader newReader() { return actual.newReader(); }
@Override public IndexReader newReader() { openReaders.incrementAndGet(); return new TrackingIndexReader( accessor.newReader(), closedReaders ); }
public ControlledPopulationIndexProvider() { super( PROVIDER_DESCRIPTOR, IndexDirectoryStructure.NONE ); setInitialIndexState( initialIndexState ); when( mockedWriter.newReader() ).thenReturn( IndexReader.EMPTY ); }
protected AutoCloseable query( SimpleNodeValueClient client, IndexOrder order, IndexQuery... predicates ) throws Exception { IndexReader reader = accessor.newReader(); reader.query( client, order, false, predicates ); return reader; }
@Override public IndexReader newReader() { LazyInstanceSelector<IndexReader> readerSelector = new LazyInstanceSelector<>( slot -> instanceSelector.select( slot ).newReader() ); return new FusionIndexReader( slotSelector, readerSelector, descriptor ); }
protected List<Long> query( IndexQuery... predicates ) throws Exception { try ( IndexReader reader = accessor.newReader(); ) { SimpleNodeValueClient nodeValueClient = new SimpleNodeValueClient(); reader.query( nodeValueClient, IndexOrder.NONE, false, predicates ); List<Long> list = new LinkedList<>(); while ( nodeValueClient.next() ) { long entityId = nodeValueClient.reference; if ( passesFilter( entityId, predicates ) ) { list.add( entityId ); } } Collections.sort( list ); return list; } }
try ( IndexReader reader = indexes.accessorFor( indexRule ).newReader() )
try ( IndexReader reader = indexes.accessorFor( index ).newReader() )
@Test public void shouldProvidePopulatorThatAcceptsDuplicateEntries() throws Exception { // when long offset = valueSet1.size(); withPopulator( indexProvider.getPopulator( descriptor, indexSamplingConfig ), p -> { p.add( updates( valueSet1, 0 ) ); p.add( updates( valueSet1, offset ) ); } ); // then try ( IndexAccessor accessor = indexProvider.getOnlineAccessor( descriptor, indexSamplingConfig ) ) { try ( IndexReader reader = new QueryResultComparingIndexReader( accessor.newReader() ) ) { int propertyKeyId = descriptor.schema().getPropertyId(); for ( NodeAndValue entry : valueSet1 ) { NodeValueIterator nodes = new NodeValueIterator(); reader.query( nodes, IndexOrder.NONE, false, IndexQuery.exact( propertyKeyId, entry.value ) ); assertEquals( entry.value.toString(), asSet( entry.nodeId, entry.nodeId + offset ), PrimitiveLongCollections.toSet( nodes ) ); } } } } }
private void assertHasAllValues( List<NodeAndValue> values ) throws IOException, IndexNotApplicableKernelException { try ( IndexAccessor accessor = indexProvider.getOnlineAccessor( descriptor, indexSamplingConfig ) ) { try ( IndexReader reader = new QueryResultComparingIndexReader( accessor.newReader() ) ) { int propertyKeyId = descriptor.schema().getPropertyId(); for ( NodeAndValue entry : values ) { NodeValueIterator nodes = new NodeValueIterator(); reader.query( nodes, IndexOrder.NONE, false, IndexQuery.exact( propertyKeyId, entry.value ) ); assertEquals( entry.nodeId, nodes.next() ); assertFalse( nodes.hasNext() ); } } } }
@Test public void shouldProvidePopulatorThatAcceptsDuplicateEntries() throws Exception { // when IndexSamplingConfig indexSamplingConfig = new IndexSamplingConfig( Config.defaults() ); withPopulator( indexProvider.getPopulator( descriptor, indexSamplingConfig ), p -> p.add( Arrays.asList( add( 1, descriptor.schema(), "v1", "v2" ), add( 2, descriptor.schema(), "v1", "v2" ) ) ) ); // then try ( IndexAccessor accessor = indexProvider.getOnlineAccessor( descriptor, indexSamplingConfig ) ) { try ( IndexReader reader = new QueryResultComparingIndexReader( accessor.newReader() ) ) { LongIterator nodes = reader.query( IndexQuery.exact( 1, "v1" ), IndexQuery.exact( 1, "v2" ) ); assertEquals( asSet( 1L, 2L ), PrimitiveLongCollections.toSet( nodes ) ); } } } }
@Test public void shouldApplyUpdatesIdempotently() throws Exception { // GIVEN IndexSamplingConfig indexSamplingConfig = new IndexSamplingConfig( Config.defaults() ); final Value propertyValue = Values.of( "value1" ); withPopulator( indexProvider.getPopulator( descriptor, indexSamplingConfig ), p -> { long nodeId = 1; // update using populator... IndexEntryUpdate<SchemaDescriptor> update = add( nodeId, descriptor.schema(), propertyValue ); p.add( singletonList( update ) ); // ...is the same as update using updater try ( IndexUpdater updater = p.newPopulatingUpdater( ( node, propertyId ) -> propertyValue ) ) { updater.process( update ); } } ); // THEN try ( IndexAccessor accessor = indexProvider.getOnlineAccessor( descriptor, indexSamplingConfig ) ) { try ( IndexReader reader = new QueryResultComparingIndexReader( accessor.newReader() ) ) { int propertyKeyId = descriptor.schema().getPropertyId(); LongIterator nodes = reader.query( IndexQuery.exact( propertyKeyId, propertyValue ) ); assertEquals( asSet( 1L ), PrimitiveLongCollections.toSet( nodes ) ); } } }
@Test public void shouldPopulateAndUpdate() throws Exception { // GIVEN withPopulator( indexProvider.getPopulator( descriptor, indexSamplingConfig ), p -> p.add( updates( valueSet1 ) ) ); try ( IndexAccessor accessor = indexProvider.getOnlineAccessor( descriptor, indexSamplingConfig ) ) { // WHEN try ( IndexUpdater updater = accessor.newUpdater( IndexUpdateMode.ONLINE ) ) { List<IndexEntryUpdate<?>> updates = updates( valueSet2 ); for ( IndexEntryUpdate<?> update : updates ) { updater.process( update ); } } // THEN try ( IndexReader reader = new QueryResultComparingIndexReader( accessor.newReader() ) ) { int propertyKeyId = descriptor.schema().getPropertyId(); for ( NodeAndValue entry : Iterables.concat( valueSet1, valueSet2 ) ) { NodeValueIterator nodes = new NodeValueIterator(); reader.query( nodes, IndexOrder.NONE, false , IndexQuery.exact( propertyKeyId, entry.value ) ); assertEquals( entry.nodeId, nodes.next() ); assertFalse( nodes.hasNext() ); } } } }
@Override public IndexReader newReader() { return accessor.newReader(); }
@Override public IndexReader newReader() { return delegate.newReader(); }
@Override public IndexReader newReader() { LazyInstanceSelector<IndexReader> readerSelector = new LazyInstanceSelector<>( slot -> instanceSelector.select( slot ).newReader() ); return new FusionIndexReader( slotSelector, readerSelector, descriptor ); }