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/29 20:56:52 UTC
svn commit: r1598369 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java
Author: jukka
Date: Thu May 29 18:56:52 2014
New Revision: 1598369
URL: http://svn.apache.org/r1598369
Log:
OAK-1804: TarMK compaction
Also track blob records that have already been compacted
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.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=1598369&r1=1598368&r2=1598369&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 Thu May 29 18:56:52 2014
@@ -179,10 +179,23 @@ public class Compactor {
private Blob compact(Blob blob) {
if (blob instanceof SegmentBlob) {
+ SegmentBlob sb = (SegmentBlob) blob;
+ RecordId id = sb.getRecordId();
+
+ // first check if we've already cloned this blob
+ RecordId compactedId = compacted.get(id);
+ if (compactedId != null) {
+ return new SegmentBlob(compactedId);
+ }
+
+ // if not, clone it and keep track of the resulting id
try {
- return ((SegmentBlob) blob).clone(writer);
+ sb = sb.clone(writer);
+ compacted.put(id, sb.getRecordId());
+ return sb;
} catch (IOException e) {
Log.warn("Failed to clone a binary value", e);
+ // fall through
}
}
return blob;