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/04/29 11:00:46 UTC

svn commit: r1676693 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java

Author: mreutegg
Date: Wed Apr 29 09:00:46 2015
New Revision: 1676693

URL: http://svn.apache.org/r1676693
Log:
OAK-2822: Release merge lock in retry loop

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java?rev=1676693&r1=1676692&r2=1676693&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java Wed Apr 29 09:00:46 2015
@@ -168,7 +168,7 @@ class DocumentNodeStoreBranch implements
     public NodeState merge(@Nonnull CommitHook hook, @Nonnull CommitInfo info)
             throws CommitFailedException {
         try {
-            return merge0(hook, info);
+            return merge0(hook, info, false);
         } catch (CommitFailedException e) {
             if (!e.isOfType(MERGE)) {
                 throw e;
@@ -176,20 +176,7 @@ class DocumentNodeStoreBranch implements
         }
         // retry with exclusive lock, blocking other
         // concurrent writes
-        // do not wait forever
-        Lock lock = null;
-        try {
-            lock = acquireMergeLock(true);
-        } catch (InterruptedException e) {
-            // ignore and proceed with shared lock used in base class
-        }
-        try {
-            return merge0(hook, info);
-        } finally {
-            if (lock != null) {
-                lock.unlock();
-            }
-        }
+        return merge0(hook, info, true);
     }
 
     @Override
@@ -205,7 +192,9 @@ class DocumentNodeStoreBranch implements
     //------------------------------< internal >--------------------------------
 
     @Nonnull
-    private NodeState merge0(@Nonnull CommitHook hook, @Nonnull CommitInfo info)
+    private NodeState merge0(@Nonnull CommitHook hook,
+                             @Nonnull CommitInfo info,
+                             boolean exclusive)
             throws CommitFailedException {
         CommitFailedException ex = null;
         long time = System.currentTimeMillis();
@@ -224,7 +213,7 @@ class DocumentNodeStoreBranch implements
             }
             try {
                 final long start = perfLogger.start();
-                Lock lock = acquireMergeLock(false);
+                Lock lock = acquireMergeLock(exclusive);
                 try {
                     perfLogger.end(start, 1, "Merge - Acquired lock");
                     return branchState.merge(checkNotNull(hook), checkNotNull(info));