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 th...@apache.org on 2013/10/24 11:26:12 UTC

svn commit: r1535325 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk: MongoNodeStore.java util/Utils.java

Author: thomasm
Date: Thu Oct 24 09:26:12 2013
New Revision: 1535325

URL: http://svn.apache.org/r1535325
Log:
OAK-455 Caching in MongoMK (add a utility method unshareString, which can be disabled when Java 7u6 becomes the minimum)

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java?rev=1535325&r1=1535324&r2=1535325&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java Thu Oct 24 09:26:12 2013
@@ -674,9 +674,7 @@ public final class MongoNodeStore
             }
             set.removeAll(removed);
             for (String name : added) {
-                // make sure the name string does not contain
-                // unnecessary baggage
-                set.add(new String(name));
+                set.add(Utils.unshareString(name));
             }
             c2.children.addAll(set);
             nodeChildrenCache.put(key, c2);
@@ -693,17 +691,13 @@ public final class MongoNodeStore
                     for (String childPath : added) {
                         String name = PathUtils.getName(childPath);
                         if (names.higher(name) != null) {
-                            // make sure the name string does not contain
-                            // unnecessary baggage
-                            names.add(new String(name));
+                            names.add(Utils.unshareString(name));
                         }
                     }
                 } else {
                     // add all
                     for (String childPath : added) {
-                        // make sure the name string does not contain
-                        // unnecessary baggage
-                        names.add(new String(PathUtils.getName(childPath)));
+                        names.add(Utils.unshareString(PathUtils.getName(childPath)));
                     }
                 }
                 // any changes?

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java?rev=1535325&r1=1535324&r2=1535325&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java Thu Oct 24 09:26:12 2013
@@ -40,6 +40,21 @@ import static com.google.common.base.Pre
  */
 public class Utils {
     
+    /**
+     * Make sure the name string does not contain unnecessary baggage (shared
+     * strings).
+     * <p>
+     * This is only needed for older versions of Java (before Java 7 update 6).
+     * See also
+     * http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-May/010257.html
+     * 
+     * @param x the string
+     * @return the new string
+     */
+    public static String unshareString(String x) {
+        return new String(x);
+    }
+    
     public static int pathDepth(String path) {
         if (path.equals("/")) {
             return 0;
@@ -92,8 +107,10 @@ public class Utils {
             size += map.size() * 136;
         } else {
             // overhead for some other kind of map
-            size += 112; // TreeMap (80) + unmodifiable wrapper (32)
-            size += map.size() * 64; // 64 bytes per entry
+            // TreeMap (80) + unmodifiable wrapper (32)
+            size += 112; 
+            // 64 bytes per entry
+            size += map.size() * 64; 
         }
         return size;
     }