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;
}
}