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() {

Reply via email to