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 2015/06/12 05:52:35 UTC

svn commit: r1685023 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java

Author: chetanm
Date: Fri Jun 12 03:52:34 2015
New Revision: 1685023

URL: http://svn.apache.org/r1685023
Log:
OAK-2927 - ReferenceEditor newIds consuming lots of memory during migration

Applying patch from Alex Parvulescu

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java?rev=1685023&r1=1685022&r2=1685023&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java Fri Jun 12 03:52:34 2015
@@ -31,6 +31,7 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.commons.PathUtils.isAbsolute;
 import static org.apache.jackrabbit.oak.plugins.index.reference.NodeReferenceConstants.REF_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.reference.NodeReferenceConstants.WEAK_REF_NAME;
+import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.MISSING_NODE;
 import static org.apache.jackrabbit.oak.plugins.version.VersionConstants.SYSTEM_PATHS;
 
 import java.util.Map;
@@ -115,6 +116,12 @@ class ReferenceEditor extends DefaultEdi
      */
     private final Set<String> newIds;
 
+    /**
+     * flag marking a reindex, case in which we don't need to keep track of the
+     * newIds set
+     */
+    private final boolean isReindex;
+
     public ReferenceEditor(NodeBuilder definition, NodeState root) {
         this.parent = null;
         this.name = null;
@@ -130,6 +137,7 @@ class ReferenceEditor extends DefaultEdi
         this.discardedIds = newHashSet();
         this.versionStoreIds = newHashSet();
         this.newIds = newHashSet();
+        this.isReindex = MISSING_NODE == root;
     }
 
     private ReferenceEditor(ReferenceEditor parent, String name, String uuid) {
@@ -147,6 +155,7 @@ class ReferenceEditor extends DefaultEdi
         this.discardedIds = parent.discardedIds;
         this.versionStoreIds = parent.versionStoreIds;
         this.newIds = parent.newIds;
+        this.isReindex = parent.isReindex;
     }
 
     /**
@@ -282,7 +291,7 @@ class ReferenceEditor extends DefaultEdi
     @Override
     public Editor childNodeAdded(String name, NodeState after) {
         String uuid = after.getString(JCR_UUID);
-        if (uuid != null) {
+        if (!isReindex && uuid != null) {
             newIds.add(uuid);
         }
         return new ReferenceEditor(this, name, uuid);