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 2013/10/23 15:08:44 UTC

svn commit: r1535016 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk: MongoMK.java MongoNodeStore.java

Author: mreutegg
Date: Wed Oct 23 13:08:44 2013
New Revision: 1535016

URL: http://svn.apache.org/r1535016
Log:
OAK-1080: MongoMK: improved concurrency

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java?rev=1535016&r1=1535015&r2=1535016&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java Wed Oct 23 13:08:44 2013
@@ -135,9 +135,7 @@ public class MongoMK implements MicroKer
 
     @Override @Nonnull
     public String checkpoint(long lifetime) throws MicroKernelException {
-        // FIXME: need to signal to the garbage collector that this revision
-        // should not be collected until the requested lifetime is over
-        return getHeadRevision();
+        return nodeStore.checkpoint(lifetime);
     }
 
     @Override
@@ -418,7 +416,6 @@ public class MongoMK implements MicroKer
                 }
             } else {
                 commit.apply();
-                nodeStore.setHeadRevision(commit.getRevision());
                 success = true;
             }
         } finally {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java?rev=1535016&r1=1535015&r2=1535016&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java Wed Oct 23 13:08:44 2013
@@ -361,17 +361,33 @@ public final class MongoNodeStore
             base = headRevision;
         }
         backgroundOperationLock.readLock().lock();
-        return commitQueue.createCommit(base);
+        boolean success = false;
+        Commit c;
+        try {
+            c = commitQueue.createCommit(base);
+            success = true;
+        } finally {
+            if (!success) {
+                backgroundOperationLock.readLock().unlock();
+            }
+        }
+        return c;
     }
 
     void done(@Nonnull Commit c, boolean isBranch) {
-        backgroundOperationLock.readLock().unlock();
-        commitQueue.done(c, isBranch, CommitInfo.EMPTY);
+        try {
+            commitQueue.done(c, isBranch, CommitInfo.EMPTY);
+        } finally {
+            backgroundOperationLock.readLock().unlock();
+        }
     }
 
     void canceled(Commit c) {
-        backgroundOperationLock.readLock().unlock();
-        commitQueue.canceled(c);
+        try {
+            commitQueue.canceled(c);
+        } finally {
+            backgroundOperationLock.readLock().unlock();
+        }
     }
 
     public void setAsyncDelay(int delay) {
@@ -761,15 +777,15 @@ public final class MongoNodeStore
     @Nonnull
     @Override
     public String checkpoint(long lifetime) {
-        // TODO: implement
-        return null;
+        // FIXME: need to signal to the garbage collector that this revision
+        // should not be collected until the requested lifetime is over
+        return getHeadRevision().toString();
     }
 
     @CheckForNull
     @Override
     public NodeState retrieve(@Nonnull String checkpoint) {
-        // TODO: implement
-        return null;
+        return getRoot(Revision.fromString(checkpoint));
     }
 
     //------------------------< RevisionContext >-------------------------------