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 re...@apache.org on 2020/04/27 14:23:31 UTC

svn commit: r1877078 - in /jackrabbit/oak/branches/1.8: ./ oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/ oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/

Author: reschke
Date: Mon Apr 27 14:23:31 2020
New Revision: 1877078

URL: http://svn.apache.org/viewvc?rev=1877078&view=rev
Log:
OAK-8944: Missing journal entry on recovery (merged r1875041 and r1875152 into 1.8)

Added:
    jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java
      - copied, changed from r1875041, jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java
Modified:
    jackrabbit/oak/branches/1.8/   (props changed)
    jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java
    jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java

Propchange: jackrabbit/oak/branches/1.8/
------------------------------------------------------------------------------
  Merged /jackrabbit/oak/trunk:r1875041,1875152

Modified: jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java?rev=1877078&r1=1877077&r2=1877078&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java (original)
+++ jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java Mon Apr 27 14:23:31 2020
@@ -237,6 +237,14 @@ public class LastRevRecoveryAgent {
                     log.info("Sweeper updated {}", updates.keySet());
                 }
             });
+
+            if (sweepRev.get() != null) {
+                // One or more journal entries were created by the sweeper.
+                // Make sure the sweep revision is different / newer than the
+                // last journal entry written so far. UnsavedModification
+                // further down needs a new revision for its journal entry.
+                sweepRev.set(Utils.max(sweepRev.get(), context.newRevision()));
+            }
         }
 
         // now deal with missing _lastRev updates
@@ -390,11 +398,16 @@ public class LastRevRecoveryAgent {
                         // journal entry, then died.
                         // in this case, don't write it again.
                         // hence: nothing to be done here. return.
+                        log.warn("Journal entry {} already exists", id);
                         return;
                     }
 
                     // otherwise store a new journal entry now
-                    docStore.create(JOURNAL, singletonList(changes.asUpdateOp(lastRootRev)));
+                    if (docStore.create(JOURNAL, singletonList(changes.asUpdateOp(lastRootRev)))) {
+                        log.info("Recovery created journal entry {}", id);
+                    } else {
+                        log.warn("Unable to create journal entry {} (already exists).", id);
+                    }
                 }
             }, new ReentrantLock());
 

Copied: jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java (from r1875041, jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java?p2=jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java&p1=jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java&r1=1875041&r2=1877078&rev=1877078&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java (original)
+++ jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java Mon Apr 27 14:23:31 2020
@@ -24,7 +24,6 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import static org.apache.jackrabbit.oak.plugins.document.TestUtils.disposeQuietly;
@@ -55,7 +54,6 @@ public class RecoveryTest extends Abstra
         return fds;
     }
 
-    @Ignore
     @Test
     public void recoverOther() throws Exception {
         NodeBuilder builder = ds1.getRoot().builder();

Modified: jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java?rev=1877078&r1=1877077&r2=1877078&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java (original)
+++ jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/TestUtils.java Mon Apr 27 14:23:31 2020
@@ -100,4 +100,12 @@ public class TestUtils {
     public static void resetRevisionClockToDefault() {
         Revision.resetClockToDefault();
     }
+
+    public static void disposeQuietly(DocumentNodeStore ns) {
+        try {
+            ns.dispose();
+        } catch (Exception e) {
+            // ignore
+        }
+    }
 }