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 ju...@apache.org on 2013/03/04 18:15:18 UTC

svn commit: r1452406 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java

Author: jukka
Date: Mon Mar  4 17:15:18 2013
New Revision: 1452406

URL: http://svn.apache.org/r1452406
Log:
OAK-633: SegmentMK: Hierarchy of journals

Make sure that branch state is restore before bailing out due to system overload

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java?rev=1452406&r1=1452405&r2=1452406&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java Mon Mar  4 17:15:18 2013
@@ -99,23 +99,27 @@ class SegmentNodeStoreBranch implements 
             if (journal.setHead(baseId, headId)) {
                 baseId = headId;
                 rootId = headId;
-            } else if (backoff < 10000) {
-                // someone else was faster, so try again later
+            } else {
+                // someone else was faster, so restore state and retry later
+                baseId = originalBaseId;
+                rootId = originalRootId;
+
                 // use exponential backoff to reduce contention
-                try {
-                    Thread.sleep(backoff, RANDOM.nextInt(1000000));
-                    backoff *= 2;
-                } catch (InterruptedException e) {
-                    throw new CommitFailedException("Commit was interrupted", e);
+                if (backoff < 10000) {
+                    try {
+                        Thread.sleep(backoff, RANDOM.nextInt(1000000));
+                        backoff *= 2;
+                    } catch (InterruptedException e) {
+                        throw new CommitFailedException(
+                                "Commit was interrupted", e);
+                    }
+                } else {
+                    throw new CommitFailedException(
+                            "System overloaded, try again later");
                 }
 
                 // rebase to latest head before trying again
-                baseId = originalBaseId;
-                rootId = originalRootId;
                 rebase();
-            } else {
-                // 
-                throw new CommitFailedException("System overloaded, try again later");
             }
         }