Author: chetanm
Date: Tue Jul 25 07:00:12 2017
New Revision: 1802891
URL: http://svn.apache.org/viewvc?rev=1802891&view=rev
Log:
OAK-6487 - IndexUpdate should not reindex newly imported index definitions
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java?rev=1802891&r1=1802890&r2=1802891&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
Tue Jul 25 07:00:12 2017
@@ -219,8 +219,11 @@ public class IndexUpdate implements Edit
return !rootState.ignoreReindexFlags;
}
// reindex in the case this is a new node, even though the reindex flag
- // might be set to 'false' (possible via content import)
- boolean result =
!before.getChildNode(INDEX_DEFINITIONS_NAME).hasChildNode(name);
+ // might be set to 'false' (possible via content import).
+ // However if its already indexed i.e. has some hidden nodes
(containing hidden data)
+ // then no need to reindex
+ boolean result =
!before.getChildNode(INDEX_DEFINITIONS_NAME).hasChildNode(name)
+ && !hasAnyHiddenNodes(definition);
if (result) {
log.info("Found a new index node [{}]. Reindexing is requested",
name);
@@ -228,6 +231,15 @@ public class IndexUpdate implements Edit
return result;
}
+ private static boolean hasAnyHiddenNodes(NodeBuilder builder){
+ for (String name : builder.getChildNodeNames()) {
+ if (NodeStateUtils.isHidden(name)){
+ return true;
+ }
+ }
+ return false;
+ }
+
private void collectIndexEditors(NodeBuilder definitions,
NodeState before) throws CommitFailedException {
for (String name : definitions.getChildNodeNames()) {
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java?rev=1802891&r1=1802890&r2=1802891&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
Tue Jul 25 07:00:12 2017
@@ -234,6 +234,26 @@ public class IndexUpdateTest {
}
@Test
+ public void testReindexAuto_ImportCase() throws Exception{
+ NodeState before = builder.getNodeState();
+
+ NodeBuilder idx =
createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME),
+ "rootIndex", false, false, ImmutableSet.of("foo"), null);
+ idx.child(":index");
+
+ NodeState after = builder.getNodeState();
+
+ NodeState indexed = HOOK.processCommit(before, after,
CommitInfo.EMPTY);
+ NodeState ns = checkPathExists(indexed, INDEX_DEFINITIONS_NAME,
+ "rootIndex");
+
+ assertEquals(0, ns.getLong("reindexCount"));
+ PropertyState ps = ns.getProperty(REINDEX_PROPERTY_NAME);
+ assertNotNull(ps);
+ assertFalse(ps.getValue(Type.BOOLEAN));
+ }
+
+ @Test
public void testReindexHidden() throws Exception {
NodeState before = EmptyNodeState.EMPTY_NODE;
NodeBuilder builder = before.builder();