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("/"))