Author: chetanm
Date: Fri Mar 28 11:04:24 2014
New Revision: 1582691

URL: http://svn.apache.org/r1582691
Log:
OAK-1341 - DocumentNodeStore: Implement revision garbage collection (WIP)

Change stored modified time in seconds.
-- Changed var names to better reflect that time is in seconds

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java?rev=1582691&r1=1582690&r2=1582691&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
 Fri Mar 28 11:04:24 2014
@@ -84,11 +84,16 @@ public class Commit {
         return op;
     }
 
-    public static long getModified(long timestamp) {
+    /**
+     * Return time in seconds with 5 second resolution
+     *
+     * @param timestamp time in millis to convert
+     * @return
+     */
+    public static long getModifiedInSecs(long timestamp) {
         // 5 second resolution
         long timeInSec = TimeUnit.MILLISECONDS.toSeconds(timestamp);
-        timeInSec = timeInSec - timeInSec % 5;
-        return TimeUnit.SECONDS.toMillis(timeInSec);
+        return timeInSec - timeInSec % 5;
     }
 
     /**

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1582691&r1=1582690&r2=1582691&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
 Fri Mar 28 11:04:24 2014
@@ -909,7 +909,7 @@ public final class DocumentNodeStore
         for (Map.Entry<Key, Operation> op : commit.getChanges().entrySet()) {
             String name = op.getKey().getName();
             if (NodeDocument.isRevisionsEntry(name)
-                    || NodeDocument.MODIFIED.equals(name)
+                    || NodeDocument.MODIFIED_IN_SECS.equals(name)
                     || NodeDocument.COLLISIONS.equals(name)) {
                 continue;
             }
@@ -1454,12 +1454,12 @@ public final class DocumentNodeStore
 
     private void diffManyChildren(JsopWriter w, String path, Revision fromRev, 
Revision toRev) {
         long minTimestamp = Math.min(fromRev.getTimestamp(), 
toRev.getTimestamp());
-        long minValue = Commit.getModified(minTimestamp);
+        long minValue = Commit.getModifiedInSecs(minTimestamp);
         String fromKey = Utils.getKeyLowerLimit(path);
         String toKey = Utils.getKeyUpperLimit(path);
         Set<String> paths = Sets.newHashSet();
         for (NodeDocument doc : store.query(Collection.NODES, fromKey, toKey,
-                NodeDocument.MODIFIED, minValue, Integer.MAX_VALUE)) {
+                NodeDocument.MODIFIED_IN_SECS, minValue, Integer.MAX_VALUE)) {
             paths.add(doc.getPath());
         }
         // also consider nodes with not yet stored modifications (OAK-1107)

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1582691&r1=1582690&r2=1582691&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
 Fri Mar 28 11:04:24 2014
@@ -28,6 +28,7 @@ import java.util.Queue;
 import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
 import javax.annotation.CheckForNull;
@@ -122,9 +123,9 @@ public final class NodeDocument extends 
     static final String COLLISIONS = "_collisions";
 
     /**
-     * The modified time (5 second resolution).
+     * The modified time in seconds (5 second resolution).
      */
-    public static final String MODIFIED = "_modified";
+    public static final String MODIFIED_IN_SECS = "_modified";
 
     private static final NavigableMap<Revision, Range> EMPTY_RANGE_MAP =
             Maps.unmodifiableNavigableMap(new TreeMap<Revision, Range>());
@@ -213,7 +214,7 @@ public final class NodeDocument extends 
      * Property name which refers to timestamp (long) of the latest revision 
kept
      * in the document
      */
-    public static final String SD_MAX_REV_TS = "_sdMaxRevTs";
+    public static final String SD_MAX_REV_TIME_IN_SECS = "_sdMaxRevTime";
 
     /**
      * A document which is created from splitting a main document can be 
classified
@@ -270,7 +271,7 @@ public final class NodeDocument extends 
      * Properties to ignore when a document is split.
      */
     private static final Set<String> IGNORE_ON_SPLIT = ImmutableSet.of(
-            ID, MOD_COUNT, MODIFIED, PREVIOUS, LAST_REV, CHILDREN_FLAG,
+            ID, MOD_COUNT, MODIFIED_IN_SECS, PREVIOUS, LAST_REV, CHILDREN_FLAG,
             HAS_BINARY_FLAG, PATH, DELETED_ONCE);
 
     public static final long HAS_BINARY_VAL = 1;
@@ -353,13 +354,13 @@ public final class NodeDocument extends 
     /**
      * Checks if this document has been modified after the given 
lastModifiedTime
      *
-     * @param lastModifiedTime time to compare against
+     * @param lastModifiedTime time to compare against in millis
      * @return <tt>true</tt> if this document was modified after the given
      *  lastModifiedTime
      */
     public boolean hasBeenModifiedSince(long lastModifiedTime){
-        Long modified = (Long) get(MODIFIED);
-        return modified != null && modified > lastModifiedTime;
+        Long modified = (Long) get(MODIFIED_IN_SECS);
+        return modified != null && modified > 
TimeUnit.MILLISECONDS.toSeconds(lastModifiedTime);
     }
 
     /**
@@ -1142,7 +1143,7 @@ public final class NodeDocument extends 
 
     public static void setModified(@Nonnull UpdateOp op,
                                    @Nonnull Revision revision) {
-        checkNotNull(op).set(MODIFIED, 
Commit.getModified(checkNotNull(revision).getTimestamp()));
+        checkNotNull(op).set(MODIFIED_IN_SECS, 
Commit.getModifiedInSecs(checkNotNull(revision).getTimestamp()));
     }
 
     public static void setRevision(@Nonnull UpdateOp op,
@@ -1241,7 +1242,7 @@ public final class NodeDocument extends 
 
     private static void setSplitDocMaxRev(@Nonnull UpdateOp op,
                                           @Nonnull Revision maxRev) {
-        checkNotNull(op).set(SD_MAX_REV_TS, maxRev.getTimestamp());
+        checkNotNull(op).set(SD_MAX_REV_TIME_IN_SECS, 
Commit.getModifiedInSecs(maxRev.getTimestamp()));
     }
 
     //----------------------------< internal 
>----------------------------------

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1582691&r1=1582690&r2=1582691&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
 Fri Mar 28 11:04:24 2014
@@ -126,7 +126,7 @@ public class MongoDocumentStore implemen
         // the _id field is the primary key, so we don't need to define it
         DBObject index = new BasicDBObject();
         // modification time (descending)
-        index.put(NodeDocument.MODIFIED, -1L);
+        index.put(NodeDocument.MODIFIED_IN_SECS, -1L);
         DBObject options = new BasicDBObject();
         options.put("unique", Boolean.FALSE);
         nodes.ensureIndex(index, options);

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java?rev=1582691&r1=1582690&r2=1582691&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java
 Fri Mar 28 11:04:24 2014
@@ -26,6 +26,7 @@ import com.mongodb.DBObject;
 import com.mongodb.QueryBuilder;
 import com.mongodb.ReadPreference;
 import org.apache.jackrabbit.oak.plugins.document.Collection;
+import org.apache.jackrabbit.oak.plugins.document.Commit;
 import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
 import org.apache.jackrabbit.oak.plugins.document.VersionGCSupport;
 import org.apache.jackrabbit.oak.plugins.document.util.CloseableIterable;
@@ -52,7 +53,7 @@ public class MongoVersionGCSupport exten
         //_deletedOnce == true && _modified < lastModifiedTime
         DBObject query = QueryBuilder
                                 
.start(NodeDocument.DELETED_ONCE).is(Boolean.TRUE)
-                                
.put(NodeDocument.MODIFIED).lessThan(lastModifiedTime)
+                                
.put(NodeDocument.MODIFIED_IN_SECS).lessThan(Commit.getModifiedInSecs(lastModifiedTime))
                         .get();
         DBCursor cursor = 
getNodeCollection().find(query).setReadPreference(ReadPreference.secondaryPreferred());
         return CloseableIterable.wrap(transform(cursor, new Function<DBObject, 
NodeDocument>() {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java?rev=1582691&r1=1582690&r2=1582691&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java
 Fri Mar 28 11:04:24 2014
@@ -27,10 +27,10 @@ public class CommitTest {
 
     @Test
     public void testModifiedTime(){
-        assertEquals(10000, Commit.getModified(10000));
-        assertEquals(10000, Commit.getModified(10003));
-        assertEquals(10000, Commit.getModified(12000));
-        assertEquals(15000, Commit.getModified(15000));
-        assertEquals(15000, Commit.getModified(15006));
+        assertEquals(10, Commit.getModifiedInSecs(10000));
+        assertEquals(10, Commit.getModifiedInSecs(10003));
+        assertEquals(10, Commit.getModifiedInSecs(12000));
+        assertEquals(15, Commit.getModifiedInSecs(15000));
+        assertEquals(15, Commit.getModifiedInSecs(15006));
     }
 }


Reply via email to