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();