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/06/12 20:47:21 UTC

svn commit: r1602261 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment: Record.java SegmentBlob.java SegmentNodeState.java

Author: jukka
Date: Thu Jun 12 18:47:21 2014
New Revision: 1602261

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

Only use the compaction map to speed up equality checks of nodes and blobs, not those of all other records.

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

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java?rev=1602261&r1=1602260&r2=1602261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java Thu Jun 12 18:47:21 2014
@@ -32,15 +32,7 @@ class Record {
     }
 
     static boolean fastEquals(Record a, Record b) {
-        if (a.segmentId == b.segmentId && a.offset == b.offset) {
-            return true;
-        }
-
-        CompactionMap compaction = a.segmentId.getTracker().getCompactionMap();
-        RecordId aid = a.getRecordId();
-        RecordId bid = b.getRecordId();
-        return compaction.wasCompactedTo(aid, bid)
-                || compaction.wasCompactedTo(bid, aid);
+        return a.segmentId == b.segmentId && a.offset == b.offset;
     }
 
     /**
@@ -67,6 +59,11 @@ class Record {
         this.offset = offset;
     }
 
+    protected boolean wasCompactedTo(Record after) {
+        CompactionMap map = segmentId.getTracker().getCompactionMap();
+        return map.wasCompactedTo(getRecordId(), after.getRecordId());
+    }
+
     /**
      * Returns the segment that contains this record.
      *

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=1602261&r1=1602260&r2=1602261&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 Thu Jun 12 18:47:21 2014
@@ -180,6 +180,9 @@ public class SegmentBlob extends Record 
     public boolean equals(Object object) {
         if (object == this || fastEquals(this, object)) {
             return true;
+        } else if (object instanceof SegmentBlob
+                && wasCompactedTo((SegmentBlob) object)) {
+            return true;
         } else {
             return object instanceof Blob
                     && AbstractBlob.equal(this, (Blob) object);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java?rev=1602261&r1=1602260&r2=1602261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java Thu Jun 12 18:47:21 2014
@@ -389,13 +389,17 @@ public class SegmentNodeState extends Re
             return AbstractNodeState.compareAgainstBaseState(this, base, diff);
         }
 
-        Template afterTemplate = getTemplate();
-        RecordId afterId = getRecordId();
-
         SegmentNodeState that = (SegmentNodeState) base;
+        if (wasCompactedTo(that)) {
+            return true; // no changes during compaction
+        }
+
         Template beforeTemplate = that.getTemplate();
         RecordId beforeId = that.getRecordId();
 
+        Template afterTemplate = getTemplate();
+        RecordId afterId = getRecordId();
+
         // Compare type properties
         if (!compareProperties(
                 beforeTemplate.getPrimaryType(), afterTemplate.getPrimaryType(),