You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2017/07/10 08:47:57 UTC

svn commit: r1801427 - in /jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index: AbstractIndexCommandTest.java IndexImportIT.java

Author: chetanm
Date: Mon Jul 10 08:47:57 2017
New Revision: 1801427

URL: http://svn.apache.org/viewvc?rev=1801427&view=rev
Log:
OAK-6271 - Support for importing index files

Update the testcase to also assert if updates to the index definition get
picked up or not

Modified:
    jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/AbstractIndexCommandTest.java
    jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexImportIT.java

Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/AbstractIndexCommandTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/AbstractIndexCommandTest.java?rev=1801427&r1=1801426&r2=1801427&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/AbstractIndexCommandTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/AbstractIndexCommandTest.java Mon Jul 10 08:47:57 2017
@@ -36,6 +36,7 @@ import org.junit.rules.TemporaryFolder;
 import static org.apache.jackrabbit.commons.JcrUtils.getOrCreateByPath;
 
 public class AbstractIndexCommandTest {
+    public static final String TEST_INDEX_PATH = "/oak:index/fooIndex";
     @Rule
     public final TemporaryFolder temporaryFolder = new TemporaryFolder(new File("target"));
     protected RepositoryFixture fixture;
@@ -53,14 +54,14 @@ public class AbstractIndexCommandTest {
         }
         indexIndexDefinitions();
         createLuceneIndex(asyncIndex);
-        addTestContent(fixture, "/testNode/a", 100);
+        addTestContent(fixture, "/testNode/a", "foo", 100);
     }
 
-    protected void addTestContent(RepositoryFixture fixture, String basePath, int count) throws IOException, RepositoryException {
+    protected void addTestContent(RepositoryFixture fixture, String basePath, String propName, int count) throws IOException, RepositoryException {
         Session session = fixture.getAdminSession();
         for (int i = 0; i < count; i++) {
             getOrCreateByPath(basePath+i,
-                    "oak:Unstructured", session).setProperty("foo", "bar");
+                    "oak:Unstructured", session).setProperty(propName, "bar");
         }
         session.save();
         session.logout();
@@ -84,7 +85,7 @@ public class AbstractIndexCommandTest {
         idxBuilder.indexRule("nt:base").property("foo").propertyIndex();
 
         Session session = fixture.getAdminSession();
-        Node fooIndex = getOrCreateByPath("/oak:index/fooIndex",
+        Node fooIndex = getOrCreateByPath(TEST_INDEX_PATH,
                 "oak:QueryIndexDefinition", session);
 
         idxBuilder.build(fooIndex);

Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexImportIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexImportIT.java?rev=1801427&r1=1801426&r2=1801427&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexImportIT.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexImportIT.java Mon Jul 10 08:47:57 2017
@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.query.Query;
@@ -38,11 +39,16 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.index.importer.ClusterNodeStoreLock;
 import org.apache.jackrabbit.oak.plugins.index.lucene.directory.IndexRootDirectory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.directory.LocalIndexDir;
+import org.apache.jackrabbit.oak.plugins.index.lucene.util.IndexDefinitionBuilder;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.junit.Test;
 
 import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.getNode;
 import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -124,9 +130,15 @@ public class IndexImportIT extends Abstr
         //import
 
         RepositoryFixture fixture2 = new RepositoryFixture(storeDir);
-        addTestContent(fixture2, "/testNode/b", 100);
+        addTestContent(fixture2, "/testNode/b", "foo", 100);
+        addTestContent(fixture2, "/testNode/c", "bar", 100);
+        indexBarPropertyAlso(fixture2);
         fixture2.getAsyncIndexUpdate("async").run();
 
+        String explain = getQueryPlan(fixture2, "select * from [nt:base] where [bar] is not null");
+        assertThat(explain, containsString("traverse"));
+        assertThat(explain, not(containsString(TEST_INDEX_PATH)));
+
         int foo2Count = getFooCount(fixture2);
         assertEquals(fooCount + 100, foo2Count);
         assertNotNull(fixture2.getNodeStore().retrieve(checkpoint));
@@ -165,13 +177,31 @@ public class IndexImportIT extends Abstr
         //Lock should also be released
         ClusterNodeStoreLock clusterLock = new ClusterNodeStoreLock(fixture4.getNodeStore());
         assertFalse(clusterLock.isLocked("async"));
+
+        //Updates to the index definition should have got picked up
+        String explain4 = getQueryPlan(fixture4, "select * from [nt:base] where [bar] is not null");
+        assertThat(explain4, containsString(TEST_INDEX_PATH));
         fixture4.close();
     }
 
+    private void indexBarPropertyAlso(RepositoryFixture fixture2) throws IOException, RepositoryException {
+        Session session = fixture2.getAdminSession();
+        NodeState idxState = NodeStateUtils.getNode(fixture2.getNodeStore().getRoot(), TEST_INDEX_PATH);
+        IndexDefinitionBuilder idxb = new IndexDefinitionBuilder(
+                new MemoryNodeBuilder(idxState), false);
+        idxb.indexRule("nt:base").property("bar").propertyIndex();
+
+        Node idxNode = session.getNode(TEST_INDEX_PATH);
+        idxb.build(idxNode);
+        session.save();
+        session.logout();
+    }
+
     private int getFooCount(RepositoryFixture fixture) throws IOException, RepositoryException {
         Session session = fixture.getAdminSession();
         QueryManager qm = session.getWorkspace().getQueryManager();
-        assertFooIndexBeingUsed(qm);
+        String explanation = getQueryPlan(fixture, "select * from [nt:base] where [foo] is not null");
+        assertThat(explanation, containsString("/oak:index/fooIndex"));
 
         Query q = qm.createQuery("select * from [nt:base] where [foo] is not null", Query.JCR_SQL2);
         QueryResult result = q.execute();
@@ -180,11 +210,15 @@ public class IndexImportIT extends Abstr
         return size;
     }
 
-    private static void assertFooIndexBeingUsed(QueryManager qm) throws RepositoryException {
-        Query explain = qm.createQuery("explain select * from [nt:base] where [foo] is not null", Query.JCR_SQL2);
+    private static String getQueryPlan(RepositoryFixture fixture, String query) throws RepositoryException, IOException {
+        Session session = fixture.getAdminSession();
+        QueryManager qm = session.getWorkspace().getQueryManager();
+        Query explain = qm.createQuery("explain "+query, Query.JCR_SQL2);
         QueryResult explainResult = explain.execute();
         Row explainRow = explainResult.getRows().nextRow();
-        assertThat(explainRow.getValue("plan").getString(), containsString("/oak:index/fooIndex"));
+        String explanation = explainRow.getValue("plan").getString();
+        session.logout();
+        return explanation;
     }
 
 }