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/07/29 10:33:15 UTC

svn commit: r1507970 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk: Commit.java Revision.java

Author: thomasm
Date: Mon Jul 29 08:33:14 2013
New Revision: 1507970

URL: http://svn.apache.org/r1507970
Log:
OAK-926 MongoMK: split documents when they are too large (temporary solution)

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Commit.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Revision.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Commit.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Commit.java?rev=1507970&r1=1507969&r2=1507970&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Commit.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Commit.java Mon Jul 29 08:33:14 2013
@@ -45,8 +45,8 @@ public class Commit {
      */
     // TODO check which value is the best one
     //private static final int MAX_DOCUMENT_SIZE = 16 * 1024;
-    // TODO disabled until document split is fully implemented
-    private static final int MAX_DOCUMENT_SIZE = Integer.MAX_VALUE;
+    // TODO set to 512 KB currently, should be changed later on
+    private static final int MAX_DOCUMENT_SIZE = 512 * 1024;
 
     /**
      * Whether to purge old revisions if a node gets too large. If false, old
@@ -55,6 +55,12 @@ public class Commit {
      */
     private static final boolean PURGE_OLD_REVISIONS = true;
     
+    /**
+     * Revisions that are newer than this (in minutes) are kept in the newest
+     * document.
+     */
+    private static final int SPLIT_MINUTES = 5;
+    
     private final MongoMK mk;
     private final Revision baseRevision;
     private final Revision revision;
@@ -454,7 +460,13 @@ public class Commit {
                     if (propRev.equals(latestRev)) {
                         main.setMap(key, propRev.toString(), v);
                     } else {
-                        old.setMapEntry(key, propRev.toString(), v);
+                        long ageMillis = Revision.getCurrentTimestamp() - propRev.getTimestamp();
+                        long ageMinutes = ageMillis / 1000 / 60;
+                        if (ageMinutes > SPLIT_MINUTES) {
+                            old.setMapEntry(key, propRev.toString(), v);
+                        } else {
+                            main.setMap(key, propRev.toString(), v);
+                        }
                     }
                 }
             }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Revision.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Revision.java?rev=1507970&r1=1507969&r2=1507970&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Revision.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Revision.java Mon Jul 29 08:33:14 2013
@@ -163,6 +163,11 @@ public class Revision {
         return string;
     }
     
+    /**
+     * Get the timestamp in milliseconds since 1970.
+     * 
+     * @return the timestamp
+     */
     public long getTimestamp() {
         return timestamp;
     }