Author: mreutegg
Date: Thu Jul 11 08:22:51 2019
New Revision: 1862909

URL: http://svn.apache.org/viewvc?rev=1862909&view=rev
Log:
OAK-8473: oak-run recovery fails with custom blob store

Modified:
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoveryCommand.java
    
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/RecoveryCommandTest.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoveryCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoveryCommand.java?rev=1862909&r1=1862908&r2=1862909&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoveryCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RecoveryCommand.java
 Thu Jul 11 08:22:51 2019
@@ -35,6 +35,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.util.MapDBMapFactory;
 import org.apache.jackrabbit.oak.plugins.document.util.MapFactory;
 import org.apache.jackrabbit.oak.run.commons.Command;
+import org.apache.jackrabbit.oak.spi.blob.MemoryBlobStore;
 
 import com.google.common.io.Closer;
 
@@ -54,6 +55,16 @@ class RecoveryCommand implements Command
                 System.exit(1);
             }
 
+            // The recovery command does not have options for the blob store
+            // and the DocumentNodeStoreBuilder by default assumes the blobs
+            // are stored in the same location as the documents. That is,
+            // either in MongoDB or RDB, which is not necessarily the case and
+            // can cause an exception when the blob store implementation starts
+            // read-only on a database that does not have the required
+            // collection. Use an in-memory blob store instead, because the
+            // recovery command does not read blobs anyway.
+            builder.setBlobStore(new MemoryBlobStore());
+
             // dryRun implies readonly repo
             boolean dryRun = Arrays.asList(args).contains("dryRun");
             if (dryRun) {

Modified: 
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/RecoveryCommandTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/RecoveryCommandTest.java?rev=1862909&r1=1862908&r2=1862909&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/RecoveryCommandTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/RecoveryCommandTest.java
 Thu Jul 11 08:22:51 2019
@@ -24,14 +24,12 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.blob.MemoryBlobStore;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assume.assumeTrue;
 
-@Ignore("OAK-8473")
 public class RecoveryCommandTest {
 
     @Rule


Reply via email to