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 ju...@apache.org on 2014/05/30 22:13:51 UTC

svn commit: r1598732 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment: Compactor.java SegmentBlob.java

Author: jukka
Date: Fri May 30 20:13:51 2014
New Revision: 1598732

URL: http://svn.apache.org/r1598732
Log:
OAK-1804: TarMK compaction

Avoid compacting external blobs

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java?rev=1598732&r1=1598731&r2=1598732&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java Fri May 30 20:13:51 2014
@@ -201,12 +201,12 @@ public class Compactor {
             SegmentBlob sb = (SegmentBlob) blob;
 
             try {
-                // if the blob is inlined, just compact without de-duplication
-                if (sb.length() < Segment.MEDIUM_LIMIT) {
+                // if the blob is inlined or external, just clone it
+                if (sb.length() < Segment.MEDIUM_LIMIT || sb.isExternal()) {
                     return sb.clone(writer);
                 }
 
-                // then check if we've already cloned this specific record
+                // else check if we've already cloned this specific record
                 RecordId id = sb.getRecordId();
                 RecordId compactedId = compacted.get(id);
                 if (compactedId != null) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java?rev=1598732&r1=1598731&r2=1598732&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java Fri May 30 20:13:51 2014
@@ -128,6 +128,14 @@ public class SegmentBlob extends Record 
         return getRecordId().toString();
     }
 
+    public boolean isExternal() {
+        Segment segment = getSegment();
+        int offset = getOffset();
+        byte head = segment.readByte(offset);
+        // 1110 xxxx: external value
+        return (head & 0xf0) == 0xe0;
+    }
+
     public String getBlobId() {
         Segment segment = getSegment();
         int offset = getOffset();