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));
}
}