This is an automated email from the ASF dual-hosted git repository.
mkataria pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new cb00765f3c OAK-10273: Index-definition json created during oak-run
reindex shoul… (#991)
cb00765f3c is described below
commit cb00765f3c11c04c607c2b62a4b11fa0ad40a7e3
Author: Mohit Kataria <[email protected]>
AuthorDate: Tue Jul 18 13:21:17 2023 +0530
OAK-10273: Index-definition json created during oak-run reindex shoul…
(#991)
* OAK-10273: Index-definition json created during oak-run reindex should
not serialise index data
---
.../jackrabbit/oak/index/IndexerSupport.java | 2 +-
.../oak/index/AbstractIndexTestCommand.java | 11 ++++++
.../oak/index/ElasticAbstractIndexCommandTest.java | 3 +-
.../oak/index/LuceneAbstractIndexCommandTest.java | 3 +-
.../org/apache/jackrabbit/oak/index/ReindexIT.java | 40 ++++++++++++++++++++--
5 files changed, 53 insertions(+), 6 deletions(-)
diff --git
a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/IndexerSupport.java
b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/IndexerSupport.java
index faec0149d4..f52896e6dc 100644
---
a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/IndexerSupport.java
+++
b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/IndexerSupport.java
@@ -121,7 +121,7 @@ public class IndexerSupport {
protected void dumpIndexDefinitions(NodeStore nodeStore) throws
IOException {
IndexDefinitionPrinter printer = new IndexDefinitionPrinter(nodeStore,
indexHelper.getIndexPathService());
- printer.setFilter("{\"properties\":[\"*\",
\"-:childOrder\"],\"nodes\":[\"*\", \"-:index-definition\"]}");
+ printer.setFilter("{\"properties\":[\"*\",
\"-:childOrder\"],\"nodes\":[\"*\", \"-:index-definition\", \"-:data\",
\"-:suggest-data\"]}");
PrinterDumper dumper = new PrinterDumper(getLocalIndexDir(),
IndexDefinitionUpdater.INDEX_DEFINITIONS_JSON,
false, Format.JSON, printer);
dumper.dump();
diff --git
a/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/AbstractIndexTestCommand.java
b/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/AbstractIndexTestCommand.java
index 42050f6f0e..19613d55bd 100644
---
a/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/AbstractIndexTestCommand.java
+++
b/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/AbstractIndexTestCommand.java
@@ -18,6 +18,7 @@
*/
package org.apache.jackrabbit.oak.index;
+import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
import org.junit.After;
import org.junit.Rule;
@@ -71,6 +72,16 @@ public abstract class AbstractIndexTestCommand {
session.logout();
}
+ protected void addSuggestContent(IndexRepositoryFixture fixture, String
basePath, String propName, int count) throws RepositoryException, IOException {
+ Session session = fixture.getAdminSession();
+ for (int i = 0; i < count; i++) {
+ JcrUtils.getOrCreateByPath(basePath + i,
+ "oak:Unstructured", session).setProperty(propName,
"suggest Property " + i + basePath);
+ }
+ session.save();
+ session.logout();
+ }
+
private void indexIndexDefinitions() throws IOException,
RepositoryException {
//By default Oak index definitions are not indexed
//so add them to declaringNodeTypes
diff --git
a/oak-run-elastic/src/test/java/org/apache/jackrabbit/oak/index/ElasticAbstractIndexCommandTest.java
b/oak-run-elastic/src/test/java/org/apache/jackrabbit/oak/index/ElasticAbstractIndexCommandTest.java
index abcf34800e..02a2aa0694 100644
---
a/oak-run-elastic/src/test/java/org/apache/jackrabbit/oak/index/ElasticAbstractIndexCommandTest.java
+++
b/oak-run-elastic/src/test/java/org/apache/jackrabbit/oak/index/ElasticAbstractIndexCommandTest.java
@@ -58,13 +58,14 @@ public class ElasticAbstractIndexCommandTest extends
AbstractIndexTestCommand {
if (!asyncIndex) {
idxBuilder.noAsync();
}
- idxBuilder.indexRule(nodeType).property(propName).propertyIndex();
+
idxBuilder.indexRule(nodeType).property(propName).propertyIndex().useInSuggest().analyzed();
Session session = fixture.getAdminSession();
Node fooIndex = getOrCreateByPath(TEST_INDEX_PATH,
"oak:QueryIndexDefinition", session);
idxBuilder.build(fooIndex);
+
fooIndex.addNode("suggestion").setProperty("suggestUpdateFrequencyMinutes", 0);
session.save();
session.logout();
}
diff --git
a/oak-run/src/test/java/org/apache/jackrabbit/oak/index/LuceneAbstractIndexCommandTest.java
b/oak-run/src/test/java/org/apache/jackrabbit/oak/index/LuceneAbstractIndexCommandTest.java
index 045c75ca0d..e99a51e610 100644
---
a/oak-run/src/test/java/org/apache/jackrabbit/oak/index/LuceneAbstractIndexCommandTest.java
+++
b/oak-run/src/test/java/org/apache/jackrabbit/oak/index/LuceneAbstractIndexCommandTest.java
@@ -44,13 +44,14 @@ public class LuceneAbstractIndexCommandTest extends
AbstractIndexTestCommand {
if (!asyncIndex) {
idxBuilder.noAsync();
}
- idxBuilder.indexRule(nodeType).property(propName).propertyIndex();
+
idxBuilder.indexRule(nodeType).property(propName).propertyIndex().useInSuggest().analyzed();
Session session = fixture.getAdminSession();
Node fooIndex = getOrCreateByPath(TEST_INDEX_PATH,
"oak:QueryIndexDefinition", session);
idxBuilder.build(fooIndex);
+
fooIndex.addNode("suggestion").setProperty("suggestUpdateFrequencyMinutes", 0);
session.save();
session.logout();
}
diff --git
a/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java
b/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java
index fea417e70b..91a9760a8b 100644
--- a/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java
+++ b/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java
@@ -48,6 +48,7 @@ import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.jcr.query.Row;
+import javax.jcr.query.RowIterator;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
@@ -146,12 +147,16 @@ public class ReindexIT extends
LuceneAbstractIndexCommandTest {
@Test
public void reindexAndThenImport() throws Exception {
createTestData(true);
+ int fooSuggestCount = 2;
+ int contentCount = 100;
+ addSuggestContent(fixture, "/testnode/suggest1", "foo",
fooSuggestCount);
fixture.getAsyncIndexUpdate("async").run();
//Update index to bar property also but do not index yet
indexBarPropertyAlso(fixture);
int fooCount = getFooCount(fixture, "foo");
+ List<String> suggestResults1 = getSuggestResults(fixture);
String checkpoint =
fixture.getNodeStore().checkpoint(TimeUnit.HOURS.toMillis(24));
//Close the repository so as all changes are flushed
@@ -178,15 +183,18 @@ public class ReindexIT extends
LuceneAbstractIndexCommandTest {
//import
IndexRepositoryFixture fixture2 = new
LuceneRepositoryFixture(storeDir);
- addTestContent(fixture2, "/testNode/b", "foo", 100);
- addTestContent(fixture2, "/testNode/c", "bar", 100);
+ addTestContent(fixture2, "/testNode/b", "foo", contentCount);
+ addTestContent(fixture2, "/testNode/c", "bar", contentCount);
+ addSuggestContent(fixture2, "/testNode/suggest2", "foo",
fooSuggestCount);
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, "foo");
- assertEquals(fooCount + 100, foo2Count);
+ List<String> suggestResults2 = getSuggestResults(fixture2);
+ assertEquals(suggestResults1.size() + fooSuggestCount,
suggestResults2.size());
+ assertEquals(fooCount + contentCount + fooSuggestCount, foo2Count);
assertNotNull(fixture2.getNodeStore().retrieve(checkpoint));
fixture2.close();
@@ -213,8 +221,10 @@ public class ReindexIT extends
LuceneAbstractIndexCommandTest {
IndexRepositoryFixture fixture4 = new
LuceneRepositoryFixture(storeDir);
int foo4Count = getFooCount(fixture4, "foo");
+ List<String> suggestResults4 = getSuggestResults(fixture4);
//new count should be same as previous
assertEquals(foo2Count, foo4Count);
+ assertEquals(suggestResults2.size(), suggestResults4.size());
//Checkpoint must be released
assertNull(fixture4.getNodeStore().retrieve(checkpoint));
@@ -389,6 +399,30 @@ public class ReindexIT extends
LuceneAbstractIndexCommandTest {
return explanation;
}
+ public List<String> getSuggestResults(IndexRepositoryFixture fixture)
throws Exception {
+ Session session = fixture.getAdminSession();
+
+ QueryManager qm = session.getWorkspace().getQueryManager();
+ String sql = "SELECT [rep:suggest()] FROM [nt:base] WHERE
SUGGEST('sugge')";
+ String explanation = getQueryPlan(fixture, sql);
+ assertThat(explanation, containsString("/oak:index/fooIndex"));
+
+ Query q = qm.createQuery(sql, Query.SQL);
+ List<String> result = getResult(q.execute(), "rep:suggest()");
+ assertNotNull(result);
+ return result;
+ }
+
+ private List<String> getResult(QueryResult result, String propertyName)
throws RepositoryException {
+ List<String> results = Lists.newArrayList();
+ RowIterator it = result.getRows();
+ while (it.hasNext()) {
+ Row row = it.nextRow();
+ results.add(row.getValue(propertyName).getString());
+ }
+ return results;
+ }
+
public static <E extends Throwable> void assertExits(final int
expectedStatus, final ThrowingExecutable<E> executable) throws E {
final SecurityManager originalSecurityManager = getSecurityManager();
setSecurityManager(new SecurityManager() {