Author: jukka
Date: Tue Dec 17 16:48:07 2013
New Revision: 1551618

URL: http://svn.apache.org/r1551618
Log:
OAK-1273: Reduce overhead when handling many parallel property indices

Avoid an extra level of MapRecord.compare() stack frames

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

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapRecord.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapRecord.java?rev=1551618&r1=1551617&r2=1551618&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapRecord.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MapRecord.java
 Tue Dec 17 16:48:07 2013
@@ -363,38 +363,11 @@ class MapRecord extends Record {
         boolean entryDeleted(MapEntry before);
     }
 
-    boolean compare(MapRecord base, MapDiff diff) {
-        return compare(base, this, diff);
-    }
-
-    //------------------------------------------------------------< Object >--
-
-    @Override
-    public String toString() {
-        StringBuilder builder = null;
-        for (MapEntry entry : getEntries()) {
-            if (builder == null) {
-                builder = new StringBuilder("{ ");
-            } else {
-                builder.append(", ");
-            }
-            builder.append(entry);
-        }
-        if (builder == null) {
-            return "{}";
-        } else {
-            builder.append(" }");
-            return builder.toString();
-        }
-    }
-
-    //-----------------------------------------------------------< private >--
-
-    private static boolean compare(
-            MapRecord before, MapRecord after, MapDiff diff) {
+    boolean compare(MapRecord before, MapDiff diff) {
         Segment beforeSegment = before.getSegment();
         int beforeHead = beforeSegment.readInt(before.getOffset(0));
 
+        MapRecord after = this;
         Segment afterSegment = after.getSegment();
         int afterHead = afterSegment.readInt(after.getOffset(0));
 
@@ -472,6 +445,29 @@ class MapRecord extends Record {
         return true;
     }
 
+    //------------------------------------------------------------< Object >--
+
+    @Override
+    public String toString() {
+        StringBuilder builder = null;
+        for (MapEntry entry : getEntries()) {
+            if (builder == null) {
+                builder = new StringBuilder("{ ");
+            } else {
+                builder.append(", ");
+            }
+            builder.append(entry);
+        }
+        if (builder == null) {
+            return "{}";
+        } else {
+            builder.append(" }");
+            return builder.toString();
+        }
+    }
+
+    //-----------------------------------------------------------< private >--
+
     /**
      * Compares two map branches. Given the way the comparison algorithm
      * works, the branches are always guaranteed to be at the same level
@@ -504,7 +500,7 @@ class MapRecord extends Record {
                 // both before and after buckets exist; compare recursively
                 MapRecord beforeBucket = beforeBuckets[i];
                 MapRecord afterBucket = afterBuckets[i];
-                if (!compare(beforeBucket, afterBucket, diff)) {
+                if (!afterBucket.compare(beforeBucket, diff)) {
                     return false;
                 }
             }


Reply via email to