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 2020/03/13 12:49:19 UTC

svn commit: r1875152 - in /jackrabbit/oak/trunk/oak-store-document/src: main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java

Author: mreutegg
Date: Fri Mar 13 12:49:18 2020
New Revision: 1875152

URL: http://svn.apache.org/viewvc?rev=1875152&view=rev
Log:
OAK-8944: Missing journal entry on recovery

Apply fix and enable test

Modified:
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java
    jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java?rev=1875152&r1=1875151&r2=1875152&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/LastRevRecoveryAgent.java Fri Mar 13 12:49:18 2020
@@ -284,6 +284,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
@@ -452,11 +460,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
-                    store.create(JOURNAL, singletonList(changes.asUpdateOp(lastRootRev)));
+                    if (store.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());
 

Modified: 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/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java?rev=1875152&r1=1875151&r2=1875152&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RecoveryTest.java Fri Mar 13 12:49:18 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();