Search in sources :

Example 16 with Cursor

use of org.apache.jackrabbit.oak.spi.query.Cursor in project jackrabbit-oak by apache.

the class LuceneIndexTest method testCursorStability.

@Test
public void testCursorStability() throws Exception {
    NodeBuilder index = newLucenePropertyIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "lucene", ImmutableSet.of("foo"), null);
    NodeBuilder rules = index.child(INDEX_RULES);
    NodeBuilder fooProp = rules.child("nt:base").child(LuceneIndexConstants.PROP_NODE).child("foo");
    fooProp.setProperty(LuceneIndexConstants.PROP_PROPERTY_INDEX, true);
    // 1. Create 60 nodes
    NodeState before = builder.getNodeState();
    int noOfDocs = LucenePropertyIndex.LUCENE_QUERY_BATCH_SIZE + 10;
    for (int i = 0; i < noOfDocs; i++) {
        builder.child("a" + i).setProperty("foo", (long) i);
    }
    NodeState after = builder.getNodeState();
    NodeState indexed = HOOK.processCommit(before, after, CommitInfo.EMPTY);
    tracker = new IndexTracker();
    tracker.update(indexed);
    // Perform query and get hold of cursor
    AdvancedQueryIndex queryIndex = new LucenePropertyIndex(tracker);
    FilterImpl filter = createFilter(NT_BASE);
    filter.restrictProperty("foo", Operator.GREATER_OR_EQUAL, PropertyValues.newLong(0L));
    List<IndexPlan> plans = queryIndex.getPlans(filter, null, indexed);
    Cursor cursor = queryIndex.query(plans.get(0), indexed);
    // Trigger loading of cursor
    assertTrue(cursor.hasNext());
    // Now before traversing further go ahead and delete all but 10 nodes
    before = indexed;
    builder = indexed.builder();
    for (int i = 0; i < noOfDocs - 10; i++) {
        builder.child("a" + i).remove();
    }
    after = builder.getNodeState();
    indexed = HOOK.processCommit(before, after, CommitInfo.EMPTY);
    builder = indexed.builder();
    // Ensure that Lucene actually removes deleted docs
    NodeBuilder idx = builder.child(INDEX_DEFINITIONS_NAME).child("lucene");
    purgeDeletedDocs(idx, new IndexDefinition(root, idx.getNodeState(), "/foo"));
    int numDeletes = getDeletedDocCount(idx, new IndexDefinition(root, idx.getNodeState(), "/foo"));
    Assert.assertEquals(0, numDeletes);
    // Update the IndexSearcher
    tracker.update(builder.getNodeState());
    // its hard to get correct size estimate as post deletion cursor
    // would have already picked up 50 docs which would not be considered
    // deleted by QE for the revision at which query was triggered
    // So just checking for >
    List<String> resultPaths = Lists.newArrayList();
    while (cursor.hasNext()) {
        resultPaths.add(cursor.next().getPath());
    }
    Set<String> uniquePaths = Sets.newHashSet(resultPaths);
    assertEquals(resultPaths.size(), uniquePaths.size());
    assertTrue(!uniquePaths.isEmpty());
}
Also used : NodeState(org.apache.jackrabbit.oak.spi.state.NodeState) FilterImpl(org.apache.jackrabbit.oak.query.index.FilterImpl) NodeBuilder(org.apache.jackrabbit.oak.spi.state.NodeBuilder) Cursor(org.apache.jackrabbit.oak.spi.query.Cursor) AdvancedQueryIndex(org.apache.jackrabbit.oak.spi.query.QueryIndex.AdvancedQueryIndex) LuceneIndexHelper.newLucenePropertyIndexDefinition(org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLucenePropertyIndexDefinition) LuceneIndexHelper.newLuceneIndexDefinition(org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLuceneIndexDefinition) IndexPlan(org.apache.jackrabbit.oak.spi.query.QueryIndex.IndexPlan) Test(org.junit.Test)

Example 17 with Cursor

use of org.apache.jackrabbit.oak.spi.query.Cursor in project jackrabbit-oak by apache.

the class CursorsTest method intersectionCursorExceptions.

@Test
public void intersectionCursorExceptions() {
    QueryEngineSettings s = new QueryEngineSettings();
    Cursor a = new SimpleCursor("1:", "/x", "/b", "/c", "/e", "/e", "/c");
    Cursor b = new SimpleCursor("2:", "/a", "/c", "/d", "/b", "/c");
    Cursor c = Cursors.newIntersectionCursor(a, b, s);
    c.next();
    c.next();
    try {
        c.remove();
        fail();
    } catch (UnsupportedOperationException e) {
    // expected
    }
    try {
        c.next();
        fail();
    } catch (IllegalStateException e) {
    // expected
    }
}
Also used : QueryEngineSettings(org.apache.jackrabbit.oak.query.QueryEngineSettings) Cursor(org.apache.jackrabbit.oak.spi.query.Cursor) Test(org.junit.Test)

Example 18 with Cursor

use of org.apache.jackrabbit.oak.spi.query.Cursor in project jackrabbit-oak by apache.

the class CursorsTest method intersectionCursor.

@Test
public void intersectionCursor() {
    QueryEngineSettings s = new QueryEngineSettings();
    Cursor a = new SimpleCursor("1:", "/b", "/c", "/e", "/e", "/c");
    Cursor b = new SimpleCursor("2:", "/a", "/c", "/d", "/b", "/c");
    Cursor c = Cursors.newIntersectionCursor(a, b, s);
    assertEquals("1:/b, 1:/c", list(c));
    assertFalse(c.hasNext());
}
Also used : QueryEngineSettings(org.apache.jackrabbit.oak.query.QueryEngineSettings) Cursor(org.apache.jackrabbit.oak.spi.query.Cursor) Test(org.junit.Test)

Aggregations

Cursor (org.apache.jackrabbit.oak.spi.query.Cursor)18 Test (org.junit.Test)11 FilterImpl (org.apache.jackrabbit.oak.query.index.FilterImpl)9 IndexPlan (org.apache.jackrabbit.oak.spi.query.QueryIndex.IndexPlan)9 NodeState (org.apache.jackrabbit.oak.spi.state.NodeState)9 AdvancedQueryIndex (org.apache.jackrabbit.oak.spi.query.QueryIndex.AdvancedQueryIndex)7 NodeBuilder (org.apache.jackrabbit.oak.spi.state.NodeBuilder)7 QueryEngineSettings (org.apache.jackrabbit.oak.query.QueryEngineSettings)4 OakSolrConfiguration (org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration)3 Function (com.google.common.base.Function)2 DefaultSolrConfiguration (org.apache.jackrabbit.oak.plugins.index.solr.configuration.DefaultSolrConfiguration)2 OakSolrConfigurationProvider (org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfigurationProvider)2 SolrServerProvider (org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider)2 SelectorImpl (org.apache.jackrabbit.oak.query.ast.SelectorImpl)2 IndexRow (org.apache.jackrabbit.oak.spi.query.IndexRow)2 QueryIndex (org.apache.jackrabbit.oak.spi.query.QueryIndex)2 SolrClient (org.apache.solr.client.solrj.SolrClient)2 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Iterator (java.util.Iterator)1