Author: mreutegg
Date: Wed Jul  8 15:38:33 2015
New Revision: 1689903

URL: http://svn.apache.org/r1689903
Log:
OAK-3084: Commit.applyToDocumentStore(Revision) may rollback committed changes

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

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java?rev=1689903&r1=1689902&r2=1689903&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
 Wed Jul  8 15:38:33 2015
@@ -341,6 +341,7 @@ public class Commit {
             NodeDocument.setRevision(commitRoot, revision, commitValue);
             newNodes.add(commitRoot);
         }
+        boolean success = false;
         try {
             if (newNodes.size() > 0) {
                 // set commit root on new nodes
@@ -394,6 +395,7 @@ public class Commit {
                                 "Update operation failed: " + commitRoot;
                         throw new DocumentStoreException(msg);
                     } else {
+                        success = true;
                         // if we get here the commit was successful and
                         // the commit revision is set on the commitRoot
                         // document for this commit.
@@ -411,8 +413,13 @@ public class Commit {
                 operations.put(commitRootPath, commitRoot);
             }
         } catch (DocumentStoreException e) {
-            rollback(newNodes, opLog, commitRoot);
-            throw e;
+            // OAK-3084 do not roll back if already committed
+            if (success) {
+                LOG.error("Exception occurred after commit. Rollback will be 
suppressed.", e);
+            } else {
+                rollback(newNodes, opLog, commitRoot);
+                throw e;
+            }
         }
     }
 


Reply via email to