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 to...@apache.org on 2016/08/10 12:01:33 UTC

svn commit: r1755728 - /jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/IndexCopier.java

Author: tomekr
Date: Wed Aug 10 12:01:32 2016
New Revision: 1755728

URL: http://svn.apache.org/viewvc?rev=1755728&view=rev
Log:
OAK-4500: Create tooling for reducing a document-based repository to a list of paths

-Copy indexing data from the private mounts nodes (:oak:mount-private-index)

Modified:
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/IndexCopier.java

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/IndexCopier.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/IndexCopier.java?rev=1755728&r1=1755727&r2=1755728&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/IndexCopier.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/IndexCopier.java Wed Aug 10 12:01:32 2016
@@ -16,12 +16,15 @@
  */
 package org.apache.jackrabbit.oak.upgrade;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.upgrade.nodestate.NodeStateCopier;
 
+import javax.annotation.Nullable;
 import java.util.Set;
 
 import static java.util.Collections.singleton;
@@ -80,33 +83,60 @@ public final class IndexCopier {
     }
 
     private static void copyUniqueIndex(NodeState indexDef, NodeBuilder targetIndexDef, Set<String> includes) {
-        NodeState indexNode = indexDef.getChildNode(INDEX_CONTENT_NODE_NAME);
-        NodeBuilder targetIndexNode = copySingleNode(indexNode, targetIndexDef, INDEX_CONTENT_NODE_NAME);
-
-        for (ChildNodeEntry attr : indexNode.getChildNodeEntries()) {
-            Iterable<String> entries = attr.getNodeState().getStrings("entry");
-            if (entries != null) {
-                for (String e : entries) {
-                    if (startsWithAny(e, includes)) {
-                        copySingleNode(attr, targetIndexNode);
+        for (ChildNodeEntry childIndexNode : getIndexNodes(indexDef)) {
+            NodeState indexNode = childIndexNode.getNodeState();
+            NodeBuilder targetIndexNode = copySingleNode(indexNode, targetIndexDef, childIndexNode.getName());
+
+            boolean anyAttrCopied = false;
+            for (ChildNodeEntry attr : indexNode.getChildNodeEntries()) {
+                Iterable<String> entries = attr.getNodeState().getStrings("entry");
+                if (entries != null) {
+                    for (String e : entries) {
+                        if (startsWithAny(e, includes)) {
+                            copySingleNode(attr, targetIndexNode);
+                            anyAttrCopied = true;
+                        }
                     }
                 }
             }
+            if (!anyAttrCopied) {
+                targetIndexNode.remove();
+            }
         }
     }
 
     private static void copyMirrorIndex(NodeState indexDef, NodeBuilder targetIndexDef, Set<String> includes) {
-        NodeState indexNode = indexDef.getChildNode(INDEX_CONTENT_NODE_NAME);
-        NodeBuilder targetIndexNode = copySingleNode(indexNode, targetIndexDef, INDEX_CONTENT_NODE_NAME);
-
-        for (ChildNodeEntry attr : indexNode.getChildNodeEntries()) {
-            NodeBuilder targetAttr = copySingleNode(attr, targetIndexNode);
-            NodeStateCopier.builder()
-                    .include(includes)
-                    .copy(attr.getNodeState(), targetAttr);
+        for (ChildNodeEntry childIndexNode : getIndexNodes(indexDef)) {
+            NodeState indexNode = childIndexNode.getNodeState();
+            NodeBuilder targetIndexNode = copySingleNode(indexNode, targetIndexDef, childIndexNode.getName());
+
+            boolean anyAttrCopied = false;
+            for (ChildNodeEntry attr : indexNode.getChildNodeEntries()) {
+                NodeBuilder targetAttr = copySingleNode(attr, targetIndexNode);
+                boolean copied = NodeStateCopier.builder()
+                        .include(includes)
+                        .copy(attr.getNodeState(), targetAttr);
+                if (!copied) {
+                    targetAttr.remove();
+                }
+                anyAttrCopied = copied || anyAttrCopied;
+            }
+            if (!anyAttrCopied) {
+                targetIndexNode.remove();
+            }
         }
     }
 
+    private static Iterable<? extends ChildNodeEntry> getIndexNodes(NodeState indexDef) {
+        return Iterables.filter(indexDef.getChildNodeEntries(), new Predicate<ChildNodeEntry>() {
+            @Override
+            public boolean apply(@Nullable ChildNodeEntry input) {
+                String name = input.getName();
+                return name.equals(INDEX_CONTENT_NODE_NAME) || name.startsWith(":oak:mount-");
+            }
+        });
+    }
+
     private static void copyLuceneIndex(NodeState indexDef, NodeBuilder targetIndexDef, Set<String> includes) {
         NodeStateCopier.builder()
                 .include(singleton("/"))