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