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 al...@apache.org on 2014/08/21 16:20:13 UTC

svn commit: r1619406 - in /jackrabbit/oak/branches/1.0: ./ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java

Author: alexparvulescu
Date: Thu Aug 21 14:20:13 2014
New Revision: 1619406

URL: http://svn.apache.org/r1619406
Log:
OAK-2042 TarMK CompactionMap should include more nodes
 - merged rev 1619222


Modified:
    jackrabbit/oak/branches/1.0/   (props changed)
    jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java

Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
  Merged /jackrabbit/oak/trunk:r1619222

Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java?rev=1619406&r1=1619405&r2=1619406&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java Thu Aug 21 14:20:13 2014
@@ -52,6 +52,11 @@ public class Compactor {
     private static final Logger log = LoggerFactory.getLogger(Compactor.class);
 
     /**
+     * over 64K in size, not will be included in the compaction map
+     */
+    private static final long threshold = 65536;
+
+    /**
      * Locks down the RecordId persistence structure
      */
     static long[] recordAsKey(RecordId r) {
@@ -123,7 +128,7 @@ public class Compactor {
             if (success) {
                 SegmentNodeState state = writer.writeNode(child.getNodeState());
                 builder.setChildNode(name, state);
-                if (id != null && state.getChildNodeCount(2) > 1) {
+                if (id != null && includeInMap(state)) {
                     map.put(id, state.getRecordId());
                 }
             }
@@ -131,6 +136,22 @@ public class Compactor {
             return success;
         }
 
+        private boolean includeInMap(SegmentNodeState state) {
+            if (state.getChildNodeCount(2) > 1) {
+                return true;
+            }
+            int count = 0;
+            for (PropertyState ps : state.getProperties()) {
+                for (int i = 0; i < ps.count(); i++) {
+                    count += ps.size(i);
+                    if (count >= threshold) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
+
         @Override
         public boolean childNodeChanged(
                 String name, NodeState before, NodeState after) {