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 to...@apache.org on 2017/03/14 08:13:22 UTC

svn commit: r1786851 - in /jackrabbit/oak/trunk: oak-doc/src/site/markdown/ oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/ oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/ oak-upgrade/src/main/java/org/apache/jackrabbit/oa...

Author: tomekr
Date: Tue Mar 14 08:13:22 2017
New Revision: 1786851

URL: http://svn.apache.org/viewvc?rev=1786851&view=rev
Log:
OAK-5920 Checkpoint migration will fail if the MissingBlobStore is used

-break the migration and introduce --skip-checkpoints option

Added:
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyCheckpointsTest.java
      - copied, changed from r1786673, jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java
Modified:
    jackrabbit/oak/trunk/oak-doc/src/site/markdown/migration.md
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java

Modified: jackrabbit/oak/trunk/oak-doc/src/site/markdown/migration.md
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/migration.md?rev=1786851&r1=1786850&r2=1786851&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-doc/src/site/markdown/migration.md (original)
+++ jackrabbit/oak/trunk/oak-doc/src/site/markdown/migration.md Tue Mar 14 08:13:22 2017
@@ -215,11 +215,13 @@ When migrating an old SegmentMK reposito
 * custom include-, exclude- or merge- paths are specified or
 * the binaries are copied by references, no source datastore is specified and two different checkpoints contains different binary under the same path.
 
-In the second case oak-upgrade emits following warning:
+In the second case oak-upgrade emits following warning and breaks:
 
-    Checkpoints won't be copied, because no external datastore has been specified. This will result in the full repository reindexing on the first start.
+    Checkpoints won't be copied, because no external datastore has been specified. This will result in the full repository reindexing on the first start. Use --skip-checkpoints to force the migration or see https://jackrabbit.apache.org/oak/docs/migration.html#Checkpoints_migration for more info.
 
-The easiest way to fix this issue is specifying the source datastore in the command line options (eg. `--src-datastore` or `--src-s3datastore`). The warning may also be ignored, but in this case the repository will be fully reindexing on the first startup, which may be a long process, especially for large instances. Repository won't be usable until the reindexing process is done.
+The easiest way to fix this issue is specifying the source datastore in the command line options (eg. `--src-datastore` or `--src-s3datastore`).
+
+The warning may also be ignored, but in this case the repository will be fully reindexed on the first startup. It may be a long process, especially for the big instance. Repository won't be usable until the reindexing process is done. Use `--skip-checkpoints` option to suppress the warning. 
 
 ## Online blob migration with SplitBlobStore
 

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java?rev=1786851&r1=1786850&r2=1786851&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java Tue Mar 14 08:13:22 2017
@@ -103,6 +103,8 @@ public class RepositorySidegrade {
      */
     private Set<String> mergePaths = DEFAULT_MERGE_PATHS;
 
+    private boolean skipCheckpoints = false;
+
     private boolean includeIndex = false;
 
     private boolean filterLongNames = true;
@@ -233,6 +235,10 @@ public class RepositorySidegrade {
         this.onlyVerify = onlyVerify;
     }
 
+    public void setSkipCheckpoints(boolean skipCheckpoints) {
+        this.skipCheckpoints = skipCheckpoints;
+    }
+
     /**
      * Same as {@link #copy(RepositoryInitializer)}, but with no custom initializer.
      *
@@ -304,14 +310,16 @@ public class RepositorySidegrade {
         if (!isCompleteMigration()) {
             LOG.info("Custom paths have been specified, checkpoints won't be migrated");
             isRemoveCheckpointReferences = true;
+        } else if (skipCheckpoints) {
+            LOG.info("Checkpoints won't be migrated because of the --skip-checkpoints option");
+            isRemoveCheckpointReferences = true;
         } else {
             boolean checkpointsCopied;
             try {
                 checkpointsCopied = copyCheckpoints(targetRoot);
             } catch(UnsupportedOperationException e) {
                 removeCheckpoints();
-                checkpointsCopied = false;
-                LOG.warn("Checkpoints won't be copied, because no external datastore has been specified. This will result in the full repository reindexing on the first start. See https://jackrabbit.apache.org/oak/docs/migration.html#Checkpoints_migration for more info.");
+                throw new RepositoryException("Checkpoints won't be copied, because no external datastore has been specified. This will result in the full repository reindexing on the first start. Use --skip-checkpoints to force the migration or see https://jackrabbit.apache.org/oak/docs/migration.html#Checkpoints_migration for more info.");
             }
             if (!checkpointsCopied) {
                 LOG.info("Copying checkpoints is not supported for this combination of node stores");

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java?rev=1786851&r1=1786850&r2=1786851&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java Tue Mar 14 08:13:22 2017
@@ -117,6 +117,7 @@ public class MigrationFactory {
         sidegrade.setIncludeIndex(options.isIncludeIndex());
         sidegrade.setVerify(options.isVerify());
         sidegrade.setOnlyVerify(options.isOnlyVerify());
+        sidegrade.setSkipCheckpoints(options.isSkipCheckpoints());
         return sidegrade;
     }
 

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java?rev=1786851&r1=1786850&r2=1786851&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java Tue Mar 14 08:13:22 2017
@@ -64,6 +64,8 @@ public class MigrationOptions {
 
     private final boolean onlyVerify;
 
+    private final boolean skipCheckpoints;
+
     private final String srcUser;
 
     private final String srcPassword;
@@ -122,6 +124,7 @@ public class MigrationOptions {
         this.ignoreMissingBinaries = args.hasOption(OptionParserFactory.IGNORE_MISSING_BINARIES);
         this.verify = args.hasOption(OptionParserFactory.VERIFY);
         this.onlyVerify = args.hasOption(OptionParserFactory.ONLY_VERIFY);
+        this.skipCheckpoints = args.hasOption(OptionParserFactory.SKIP_CHECKPOINTS);
 
         this.srcUser = args.getOption(OptionParserFactory.SRC_USER);
         this.srcPassword = args.getOption(OptionParserFactory.SRC_USER);
@@ -210,6 +213,10 @@ public class MigrationOptions {
         return onlyVerify;
     }
 
+    public boolean isSkipCheckpoints() {
+        return skipCheckpoints;
+    }
+
     public String getSrcUser() {
         return srcUser;
     }
@@ -343,6 +350,10 @@ public class MigrationOptions {
             log.info("Source DataStore external blobs: {}", srcExternalBlobs);
         }
 
+        if (skipCheckpoints) {
+            log.info("Checkpoints won't be migrated");
+        }
+
         log.info("Cache size: {} MB", cacheSizeInMB);
 
     }

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java?rev=1786851&r1=1786850&r2=1786851&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java Tue Mar 14 08:13:22 2017
@@ -82,6 +82,8 @@ public class OptionParserFactory {
 
     public static final String ONLY_VERIFY = "only-verify";
 
+    public static final String SKIP_CHECKPOINTS = "skip-checkpoints";
+
     public static OptionParser create() {
         OptionParser op = new OptionParser();
         addUsageOptions(op);
@@ -153,5 +155,6 @@ public class OptionParserFactory {
         op.accepts(SKIP_NAME_CHECK, "Skip the initial phase of testing node name lengths");
         op.accepts(VERIFY, "After the sidegrade check whether the source repository is exactly the same as destination");
         op.accepts(ONLY_VERIFY, "Performs only --" + VERIFY + ", without copying content");
+        op.accepts(SKIP_CHECKPOINTS, "Don't copy checkpoints on the full segment->segment migration");
     }
 }

Copied: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyCheckpointsTest.java (from r1786673, jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyCheckpointsTest.java?p2=jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyCheckpointsTest.java&p1=jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java&r1=1786673&r2=1786851&rev=1786851&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyCheckpointsTest.java Tue Mar 14 08:13:22 2017
@@ -14,15 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.upgrade.cli.blob;
-
-import static java.util.Arrays.asList;
-import static org.junit.Assert.assertEquals;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+package org.apache.jackrabbit.oak.upgrade;
 
 import com.google.common.base.Joiner;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -30,7 +22,6 @@ import org.apache.jackrabbit.oak.upgrade
 import org.apache.jackrabbit.oak.upgrade.cli.OakUpgrade;
 import org.apache.jackrabbit.oak.upgrade.cli.container.BlobStoreContainer;
 import org.apache.jackrabbit.oak.upgrade.cli.container.FileDataStoreContainer;
-import org.apache.jackrabbit.oak.upgrade.cli.container.JdbcNodeStoreContainer;
 import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer;
 import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer;
 import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer;
@@ -40,6 +31,7 @@ import org.apache.jackrabbit.oak.upgrade
 import org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationOptions;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.StoreArguments;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -48,105 +40,48 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import static java.util.Arrays.asList;
+import static org.junit.Assert.fail;
 
 @RunWith(Parameterized.class)
-public class CopyBinariesTest extends AbstractOak2OakTest {
+public class CopyCheckpointsTest extends AbstractOak2OakTest {
+
+    private enum Result {
+        EXCEPTION, CHECKPOINTS_MISSING, CHECKPOINTS_COPIED
+    }
 
-    private static final Logger log = LoggerFactory.getLogger(CopyBinariesTest.class);
+    private static final Logger log = LoggerFactory.getLogger(CopyCheckpointsTest.class);
 
     @Parameterized.Parameters(name = "{0}")
     public static Collection<Object[]> data() throws IOException {
         List<Object[]> params = new ArrayList<Object[]>();
 
         BlobStoreContainer blob = new FileDataStoreContainer();
-        BlobStoreContainer blob2 = new FileDataStoreContainer();
         params.add(new Object[]{
-                "Copy references, no blobstores defined, segment -> segment",
+                "Fails on missing blobstore",
                 new SegmentNodeStoreContainer(blob),
                 new SegmentNodeStoreContainer(blob),
                 asList(),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                false
-        });
-        params.add(new Object[]{
-                "Copy references, no blobstores defined, segment-tar -> segment-tar",
-                new SegmentTarNodeStoreContainer(blob),
-                new SegmentTarNodeStoreContainer(blob),
-                asList(),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                false
+                Result.EXCEPTION
         });
         params.add(new Object[]{
-                "Copy references, no blobstores defined, segment -> segment-tar",
+                "Suppress the warning",
                 new SegmentNodeStoreContainer(blob),
-                new SegmentTarNodeStoreContainer(blob),
-                asList(),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                false
-        });
-        params.add(new Object[]{
-                "Copy references, no blobstores defined, document -> segment-tar",
-                new JdbcNodeStoreContainer(blob),
                 new SegmentNodeStoreContainer(blob),
-                asList("--src-user=sa", "--src-password=sa"),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                false
+                asList("--skip-checkpoints"),
+                Result.CHECKPOINTS_MISSING
         });
         params.add(new Object[]{
-                "Copy references, no blobstores defined, segment-tar -> document",
-                new SegmentTarNodeStoreContainer(blob),
-                new JdbcNodeStoreContainer(blob),
-                asList("--user=sa", "--password=sa"),
-                DatastoreArguments.BlobMigrationCase.UNSUPPORTED,
-                false
-        });
-        params.add(new Object[]{
-                "Missing source, external destination",
-                new SegmentTarNodeStoreContainer(blob),
-                new SegmentTarNodeStoreContainer(blob),
-                asList("--datastore=" + blob.getDescription()),
-                DatastoreArguments.BlobMigrationCase.UNSUPPORTED,
-                false
-        });
-        params.add(new Object[]{
-                "Copy embedded to embedded, no blobstores defined",
-                new SegmentTarNodeStoreContainer(),
-                new SegmentTarNodeStoreContainer(),
-                asList(),
-                DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EMBEDDED,
-                true
-        });
-        params.add(new Object[]{
-                "Copy embedded to external, no blobstores defined",
-                new SegmentTarNodeStoreContainer(),
-                new SegmentTarNodeStoreContainer(blob),
-                asList("--datastore=" + blob.getDescription()),
-                DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EXTERNAL,
-                true
-        });
-        params.add(new Object[]{
-                "Copy references, src blobstore defined",
+                "Source data store defined, checkpoints migrated",
                 new SegmentTarNodeStoreContainer(blob),
                 new SegmentTarNodeStoreContainer(blob),
                 asList("--src-datastore=" + blob.getDescription()),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                true
-        });
-        params.add(new Object[]{
-                "Copy external to embedded, src blobstore defined",
-                new SegmentTarNodeStoreContainer(blob),
-                new SegmentTarNodeStoreContainer(),
-                asList("--copy-binaries", "--src-datastore=" + blob.getDescription()),
-                DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EMBEDDED,
-                true
-        });
-        params.add(new Object[]{
-                "Copy external to external, src blobstore defined",
-                new SegmentTarNodeStoreContainer(blob),
-                new SegmentTarNodeStoreContainer(blob2),
-                asList("--copy-binaries", "--src-datastore=" + blob.getDescription(), "--datastore=" + blob2.getDescription()),
-                DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EXTERNAL,
-                true
+                Result.CHECKPOINTS_COPIED
         });
         return params;
     }
@@ -157,16 +92,13 @@ public class CopyBinariesTest extends Ab
 
     private final List<String> args;
 
-    private final DatastoreArguments.BlobMigrationCase blobMigrationCase;
-
-    private final boolean supportsCheckpointMigration;
+    private final Result expectedResult;
 
-    public CopyBinariesTest(String name, NodeStoreContainer source, NodeStoreContainer destination, List<String> args, DatastoreArguments.BlobMigrationCase blobMigrationCase, boolean supportsCheckpointMigration) throws IOException, CliArgumentException {
+    public CopyCheckpointsTest(String name, NodeStoreContainer source, NodeStoreContainer destination, List<String> args, Result expectedResult) throws IOException, CliArgumentException {
         this.source = source;
         this.destination = destination;
         this.args = args;
-        this.blobMigrationCase = blobMigrationCase;
-        this.supportsCheckpointMigration = supportsCheckpointMigration;
+        this.expectedResult = expectedResult;
 
         this.source.clean();
         this.destination.clean();
@@ -207,28 +139,30 @@ public class CopyBinariesTest extends Ab
             StoreArguments stores = new StoreArguments(options, cliArgs.getArguments());
             DatastoreArguments datastores = new DatastoreArguments(options, stores, stores.srcUsesEmbeddedDatastore());
             OakUpgrade.migrate(options, stores, datastores);
-            assertEquals(blobMigrationCase, datastores.getBlobMigrationCase());
-        } catch(CliArgumentException e) {
-            if (blobMigrationCase == DatastoreArguments.BlobMigrationCase.UNSUPPORTED) {
+        } catch(RuntimeException e) {
+            if (expectedResult == Result.EXCEPTION) {
                 return;
             } else {
                 throw e;
             }
         }
+        if (expectedResult == Result.EXCEPTION) {
+            fail("Migration should fail");
+        }
         createSession();
     }
 
     @Test
     @Override
     public void validateMigration() throws RepositoryException, IOException, CliArgumentException {
-        if (blobMigrationCase == DatastoreArguments.BlobMigrationCase.UNSUPPORTED) {
-            return;
+        switch (expectedResult) {
+            case CHECKPOINTS_COPIED:
+                verifyCheckpoint();
+                break;
+
+            case CHECKPOINTS_MISSING:
+                verifyEmptyAsync();
+                break;
         }
-        super.validateMigration();
-    }
-
-    @Override
-    protected boolean supportsCheckpointMigration() {
-        return supportsCheckpointMigration;
     }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java?rev=1786851&r1=1786850&r2=1786851&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java Tue Mar 14 08:13:22 2017
@@ -216,7 +216,7 @@ public abstract class AbstractOak2OakTes
         }
     }
 
-    private void verifyCheckpoint() {
+    protected void verifyCheckpoint() {
         assertEquals("after", destination.getRoot().getString("checkpoint-state"));
 
         Map<String, String> info = destination.checkpointInfo(checkpointReference);
@@ -250,7 +250,7 @@ public abstract class AbstractOak2OakTes
     }
 
     // OAK-2869
-    private void verifyEmptyAsync() {
+    protected void verifyEmptyAsync() {
         NodeState state = destination.getRoot().getChildNode(":async");
         assertFalse(state.hasProperty("test"));
     }

Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java?rev=1786851&r1=1786850&r2=1786851&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java Tue Mar 14 08:13:22 2017
@@ -65,88 +65,77 @@ public class CopyBinariesTest extends Ab
                 new SegmentNodeStoreContainer(blob),
                 new SegmentNodeStoreContainer(blob),
                 asList(),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                false
+                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES
         });
         params.add(new Object[]{
                 "Copy references, no blobstores defined, segment-tar -> segment-tar",
                 new SegmentTarNodeStoreContainer(blob),
                 new SegmentTarNodeStoreContainer(blob),
                 asList(),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                false
+                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES
         });
         params.add(new Object[]{
                 "Copy references, no blobstores defined, segment -> segment-tar",
                 new SegmentNodeStoreContainer(blob),
                 new SegmentTarNodeStoreContainer(blob),
                 asList(),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                false
+                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES
         });
         params.add(new Object[]{
                 "Copy references, no blobstores defined, document -> segment-tar",
                 new JdbcNodeStoreContainer(blob),
                 new SegmentNodeStoreContainer(blob),
                 asList("--src-user=sa", "--src-password=sa"),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                false
+                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES
         });
         params.add(new Object[]{
                 "Copy references, no blobstores defined, segment-tar -> document",
                 new SegmentTarNodeStoreContainer(blob),
                 new JdbcNodeStoreContainer(blob),
                 asList("--user=sa", "--password=sa"),
-                DatastoreArguments.BlobMigrationCase.UNSUPPORTED,
-                false
+                DatastoreArguments.BlobMigrationCase.UNSUPPORTED
         });
         params.add(new Object[]{
                 "Missing source, external destination",
                 new SegmentTarNodeStoreContainer(blob),
                 new SegmentTarNodeStoreContainer(blob),
                 asList("--datastore=" + blob.getDescription()),
-                DatastoreArguments.BlobMigrationCase.UNSUPPORTED,
-                false
+                DatastoreArguments.BlobMigrationCase.UNSUPPORTED
         });
         params.add(new Object[]{
                 "Copy embedded to embedded, no blobstores defined",
                 new SegmentTarNodeStoreContainer(),
                 new SegmentTarNodeStoreContainer(),
                 asList(),
-                DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EMBEDDED,
-                true
+                DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EMBEDDED
         });
         params.add(new Object[]{
                 "Copy embedded to external, no blobstores defined",
                 new SegmentTarNodeStoreContainer(),
                 new SegmentTarNodeStoreContainer(blob),
                 asList("--datastore=" + blob.getDescription()),
-                DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EXTERNAL,
-                true
+                DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EXTERNAL
         });
         params.add(new Object[]{
                 "Copy references, src blobstore defined",
                 new SegmentTarNodeStoreContainer(blob),
                 new SegmentTarNodeStoreContainer(blob),
                 asList("--src-datastore=" + blob.getDescription()),
-                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
-                true
+                DatastoreArguments.BlobMigrationCase.COPY_REFERENCES
         });
         params.add(new Object[]{
                 "Copy external to embedded, src blobstore defined",
                 new SegmentTarNodeStoreContainer(blob),
                 new SegmentTarNodeStoreContainer(),
                 asList("--copy-binaries", "--src-datastore=" + blob.getDescription()),
-                DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EMBEDDED,
-                true
+                DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EMBEDDED
         });
         params.add(new Object[]{
                 "Copy external to external, src blobstore defined",
                 new SegmentTarNodeStoreContainer(blob),
                 new SegmentTarNodeStoreContainer(blob2),
                 asList("--copy-binaries", "--src-datastore=" + blob.getDescription(), "--datastore=" + blob2.getDescription()),
-                DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EXTERNAL,
-                true
+                DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EXTERNAL
         });
         return params;
     }
@@ -159,14 +148,11 @@ public class CopyBinariesTest extends Ab
 
     private final DatastoreArguments.BlobMigrationCase blobMigrationCase;
 
-    private final boolean supportsCheckpointMigration;
-
-    public CopyBinariesTest(String name, NodeStoreContainer source, NodeStoreContainer destination, List<String> args, DatastoreArguments.BlobMigrationCase blobMigrationCase, boolean supportsCheckpointMigration) throws IOException, CliArgumentException {
+    public CopyBinariesTest(String name, NodeStoreContainer source, NodeStoreContainer destination, List<String> args, DatastoreArguments.BlobMigrationCase blobMigrationCase) throws IOException, CliArgumentException {
         this.source = source;
         this.destination = destination;
         this.args = args;
         this.blobMigrationCase = blobMigrationCase;
-        this.supportsCheckpointMigration = supportsCheckpointMigration;
 
         this.source.clean();
         this.destination.clean();
@@ -226,9 +212,4 @@ public class CopyBinariesTest extends Ab
         }
         super.validateMigration();
     }
-
-    @Override
-    protected boolean supportsCheckpointMigration() {
-        return supportsCheckpointMigration;
-    }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java?rev=1786851&r1=1786850&r2=1786851&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java Tue Mar 14 08:13:22 2017
@@ -72,7 +72,10 @@ public class SegmentNodeStoreContainer i
 
     @Override
     public void close() {
-        fs.close();
+        if (fs != null) {
+            fs.close();
+            fs = null;
+        }
     }
 
     @Override