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 ch...@apache.org on 2017/10/23 05:36:10 UTC

svn commit: r1812973 - /jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/SegmentPropertyIndexEditorProvider.java

Author: chetanm
Date: Mon Oct 23 05:36:10 2017
New Revision: 1812973

URL: http://svn.apache.org/viewvc?rev=1812973&view=rev
Log:
OAK-6853 - Oak run tooling to store reindexed property index in segment store

Ensure that only visible portion is copied as at the time editor provider is
invoked the index data i.e. hidden nodes have yet not been removed

Modified:
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/SegmentPropertyIndexEditorProvider.java

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/SegmentPropertyIndexEditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/SegmentPropertyIndexEditorProvider.java?rev=1812973&r1=1812972&r2=1812973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/SegmentPropertyIndexEditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/SegmentPropertyIndexEditorProvider.java Mon Oct 23 05:36:10 2017
@@ -42,10 +42,13 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.mount.Mounts;
+import org.apache.jackrabbit.oak.spi.state.ApplyDiff;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 
 /**
  * Editor implementation which stores the property index NodeState data in a different
@@ -102,7 +105,8 @@ public class SegmentPropertyIndexEditorP
         String idxNodeName = PathUtils.getName(indexPath);
         String idxParentPath = PathUtils.getParentPath(indexPath);
         NodeBuilder newIdxBuilder = child(getRootBuilder(), idxParentPath);
-        newIdxBuilder.setChildNode(idxNodeName, definition.getNodeState());
+        NodeState nodeState = cloneVisibleState(definition.getNodeState());
+        newIdxBuilder.setChildNode(idxNodeName, nodeState);
         return newIdxBuilder.child(idxNodeName);
     }
 
@@ -141,4 +145,25 @@ public class SegmentPropertyIndexEditorP
         this.mountInfoProvider = mountInfoProvider;
         return this;
     }
+
+    private static NodeState cloneVisibleState(NodeState state){
+        NodeBuilder builder = EMPTY_NODE.builder();
+        new ApplyVisibleDiff(builder).apply(state);
+        return builder.getNodeState();
+    }
+
+    private static class ApplyVisibleDiff extends ApplyDiff {
+        public ApplyVisibleDiff(NodeBuilder builder) {
+            super(builder);
+        }
+
+        @Override
+        public boolean childNodeAdded(String name, NodeState after) {
+            if (NodeStateUtils.isHidden(name)){
+                return true;
+            }
+            return after.compareAgainstBaseState(
+                    EMPTY_NODE, new ApplyVisibleDiff(builder.child(name)));
+        }
+    }
 }