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 mr...@apache.org on 2015/10/07 18:09:11 UTC
svn commit: r1707331 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/Checkpoints.java
test/java/org/apache/jackrabbit/oak/plugins/document/CheckpointsTest.java
Author: mreutegg
Date: Wed Oct 7 16:09:11 2015
New Revision: 1707331
URL: http://svn.apache.org/viewvc?rev=1707331&view=rev
Log:
OAK-1648: Creating multiple checkpoint on same head revision overwrites previous entries
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Checkpoints.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CheckpointsTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Checkpoints.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Checkpoints.java?rev=1707331&r1=1707330&r2=1707331&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Checkpoints.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Checkpoints.java Wed Oct 7 16:09:11 2015
@@ -26,6 +26,7 @@ import java.util.SortedMap;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
import org.apache.jackrabbit.oak.commons.json.JsopReader;
@@ -73,7 +74,14 @@ class Checkpoints {
}
public Revision create(long lifetimeInMillis, Map<String, String> info) {
- Revision r = nodeStore.getHeadRevision();
+ // create a unique dummy commit we can use as checkpoint revision
+ Revision r = nodeStore.commitQueue.createRevision();
+ nodeStore.commitQueue.done(r, new CommitQueue.Callback() {
+ @Override
+ public void headOfQueue(@Nonnull Revision revision) {
+ // do nothing
+ }
+ });
createCounter.getAndIncrement();
performCleanupIfRequired();
UpdateOp op = new UpdateOp(ID, false);
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CheckpointsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CheckpointsTest.java?rev=1707331&r1=1707330&r2=1707331&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CheckpointsTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CheckpointsTest.java Wed Oct 7 16:09:11 2015
@@ -27,7 +27,6 @@ import org.apache.jackrabbit.oak.spi.com
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.stats.Clock;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
@@ -85,7 +84,6 @@ public class CheckpointsTest {
assertEquals(1, store.getCheckpoints().size());
}
- @Ignore("OAK-1648")
@Test
public void multipleCheckpointOnSameRevision() throws Exception{
long e1 = TimeUnit.HOURS.toMillis(1);
@@ -96,14 +94,15 @@ public class CheckpointsTest {
Revision r2 = Revision.fromString(store.checkpoint(e2));
Revision r1 = Revision.fromString(store.checkpoint(e1));
- //Head revision has not changed so revision must be same
- assertEquals(r1,r2);
-
clock.waitUntil(clock.getTime() + e1 + 1);
//The older checkpoint was for greater duration so checkpoint
//must not be GC
- assertEquals(r1, store.getCheckpoints().getOldestRevisionToKeep());
+ assertEquals(r2, store.getCheckpoints().getOldestRevisionToKeep());
+ // after getOldestRevisionToKeep() only one must be remaining
+ assertEquals(1, store.getCheckpoints().size());
+ assertNull(store.retrieve(r1.toString()));
+ assertNotNull(store.retrieve(r2.toString()));
}
@Test