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 2017/07/26 08:15:27 UTC

svn commit: r1803026 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java

Author: mreutegg
Date: Wed Jul 26 08:15:27 2017
New Revision: 1803026

URL: http://svn.apache.org/viewvc?rev=1803026&view=rev
Log:
OAK-6495: Fallback to classic diff when journal is broken

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=1803026&r1=1803025&r2=1803026&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 Wed Jul 26 08:15:27 2017
@@ -2717,10 +2717,10 @@ public final class DocumentNodeStore
         final long start = debug ? now() : 0;
         long getChildrenDoneIn = start;
 
-        String diff;
-        String diffAlgo;
-        RevisionVector fromRev = from.getLastRevision();
-        RevisionVector toRev = to.getLastRevision();
+        String diff = null;
+        String diffAlgo = null;
+        RevisionVector fromRev = null;
+        RevisionVector toRev = null;
         long minTimestamp = Utils.getMinTimestampForDiff(
                 from.getRootRevision(), to.getRootRevision(),
                 getMinExternalRevisions());
@@ -2732,11 +2732,22 @@ public final class DocumentNodeStore
         if (!disableJournalDiff
                 && tailRev.getTimestamp() < minTimestamp
                 && minJournalTimestamp < minTimestamp) {
-            diffAlgo = "diffJournalChildren";
-            fromRev = from.getRootRevision();
-            toRev = to.getRootRevision();
-            diff = new JournalDiffLoader(from, to, this).call();
-        } else {
+            try {
+                diff = new JournalDiffLoader(from, to, this).call();
+                diffAlgo = "diffJournalChildren";
+                fromRev = from.getRootRevision();
+                toRev = to.getRootRevision();
+            } catch (RuntimeException e) {
+                LOG.warn("diffJournalChildren failed with " +
+                        e.getClass().getSimpleName() +
+                        ", falling back to classic diff", e);
+            }
+        }
+        if (diff == null) {
+            // fall back to classic diff
+            fromRev = from.getLastRevision();
+            toRev = to.getLastRevision();
+
             JsopWriter w = new JsopStream();
             boolean continueDiff = bundledDocDiffer.diff(from, to, w);
 

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=1803026&r1=1803025&r2=1803026&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 Wed Jul 26 08:15:27 2017
@@ -3414,7 +3414,6 @@ public class DocumentNodeStoreTest {
     }
 
     // OAK-6495
-    @Ignore("OAK-6495")
     @Test
     public void diffWithBrokenJournal() throws Exception {
         Clock clock = new Clock.Virtual();