Author: mreutegg
Date: Mon Jun 26 08:22:25 2017
New Revision: 1799861

URL: http://svn.apache.org/viewvc?rev=1799861&view=rev
Log:
OAK-6392: Partial lastRev update with branches disabled

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

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1799861&r1=1799860&r2=1799861&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
 Mon Jun 26 08:22:25 2017
@@ -933,8 +933,14 @@ public final class DocumentNodeStore
             }
         } else {
             // branch commit
-            c.applyToCache(c.getBaseRevision(), isBranch);
-            return 
c.getBaseRevision().update(c.getRevision().asBranchRevision());
+            try {
+                c.applyToCache(c.getBaseRevision(), isBranch);
+                return 
c.getBaseRevision().update(c.getRevision().asBranchRevision());
+            } finally {
+                if (isDisableBranches()) {
+                    backgroundOperationLock.readLock().unlock();
+                }
+            }
         }
     }
 
@@ -949,9 +955,15 @@ public final class DocumentNodeStore
                 backgroundOperationLock.readLock().unlock();
             }
         } else {
-            Branch b = branches.getBranch(c.getBaseRevision());
-            if (b != null) {
-                b.removeCommit(c.getRevision().asBranchRevision());
+            try {
+                Branch b = branches.getBranch(c.getBaseRevision());
+                if (b != null) {
+                    b.removeCommit(c.getRevision().asBranchRevision());
+                }
+            } finally {
+                if (isDisableBranches()) {
+                    backgroundOperationLock.readLock().unlock();
+                }
             }
         }
     }
@@ -2610,7 +2622,14 @@ public final class DocumentNodeStore
 
         checkOpen();
         Commit c = new Commit(this, newRevision(), base);
-        if (!isDisableBranches()) {
+        if (isDisableBranches()) {
+            // Regular branch commits do not need to acquire the background
+            // operation lock because the head is not updated and no pending
+            // lastRev updates are done on trunk. When branches are disabled,
+            // a branch commit becomes a pseudo trunk commit and the lock
+            // must be acquired.
+            backgroundOperationLock.readLock().lock();
+        } else {
             Revision rev = c.getRevision().asBranchRevision();
             // remember branch commit
             Branch b = getBranches().getBranch(base);

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java?rev=1799861&r1=1799860&r2=1799861&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
 Mon Jun 26 08:22:25 2017
@@ -3139,7 +3139,6 @@ public class DocumentNodeStoreTest {
     }
 
     // OAK-6392
-    @Ignore("OAK-6392")
     @Test
     public void disabledBranchesWithBackgroundWrite() throws Exception {
         final Thread current = Thread.currentThread();


Reply via email to