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