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/05/09 11:51:18 UTC

svn commit: r1794546 - in /jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade: RepositorySidegrade.java cli/MigrationFactory.java cli/parser/MigrationOptions.java cli/parser/OptionParserFactory.java

Author: tomekr
Date: Tue May  9 11:51:18 2017
New Revision: 1794546

URL: http://svn.apache.org/viewvc?rev=1794546&view=rev
Log:
OAK-6190: Allow to migrate checkpoints even if the custom include paths are specified

Modified:
    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

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=1794546&r1=1794545&r2=1794546&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 May  9 11:51:18 2017
@@ -31,6 +31,7 @@ import org.apache.commons.lang.StringUti
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
@@ -44,6 +45,7 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.upgrade.RepositoryUpgrade.LoggingCompositeHook;
 import org.apache.jackrabbit.oak.upgrade.checkpoint.CheckpointRetriever;
 import org.apache.jackrabbit.oak.upgrade.cli.node.TarNodeStore;
+import org.apache.jackrabbit.oak.upgrade.nodestate.FilteringNodeState;
 import org.apache.jackrabbit.oak.upgrade.nodestate.NameFilteringNodeState;
 import org.apache.jackrabbit.oak.upgrade.nodestate.report.LoggingReporter;
 import org.apache.jackrabbit.oak.upgrade.nodestate.report.ReportingNodeState;
@@ -110,6 +112,8 @@ public class RepositorySidegrade {
 
     private boolean skipCheckpoints = false;
 
+    private boolean forceCheckpoints = false;
+
     private boolean includeIndex = false;
 
     private boolean filterLongNames = true;
@@ -250,6 +254,10 @@ public class RepositorySidegrade {
         this.skipCheckpoints = skipCheckpoints;
     }
 
+    public void setForceCheckpoints(boolean forceCheckpoints) {
+        this.forceCheckpoints = forceCheckpoints;
+    }
+
     /**
      * Copies the full content from the source to the target repository.
      * <p>
@@ -293,7 +301,7 @@ public class RepositorySidegrade {
         }
 
         boolean migrateCheckpoints = true;
-        if (!isCompleteMigration()) {
+        if (!isCompleteMigration() && !forceCheckpoints) {
             LOG.info("Checkpoints won't be migrated because of the specified paths");
             migrateCheckpoints = false;
         }
@@ -305,6 +313,10 @@ public class RepositorySidegrade {
             LOG.info("Checkpoints won't be migrated because of the --skip-checkpoints options");
             migrateCheckpoints = false;
         }
+        if (targetExists()) {
+            LOG.info("Checkpoints won't be migrated because the destination repository exists");
+            migrateCheckpoints = false;
+        }
         if (migrateCheckpoints) {
             migrateCheckpoints = migrateWithCheckpoints();
         }
@@ -344,17 +356,16 @@ public class RepositorySidegrade {
 
         Map<String, String> nameToRevision = new LinkedHashMap<>();
         Map<String, String> checkpointSegmentToDoc = new LinkedHashMap<>();
-        NodeState previousRoot = null;
+        NodeState previousRoot = EmptyNodeState.EMPTY_NODE;
         NodeBuilder targetRoot = target.getRoot().builder();
         for (CheckpointRetriever.Checkpoint checkpoint : checkpoints) {
             NodeState checkpointRoot = source.retrieve(checkpoint.getName());
-            if (previousRoot == null) {
+            if (!isCompleteMigration()) {
+                checkpointRoot = FilteringNodeState.wrap("/", checkpointRoot, includePaths, excludePaths, excludeFragments);
+            }
+            if (previousRoot == EmptyNodeState.EMPTY_NODE) {
                 LOG.info("Migrating first checkpoint: {}", checkpoint.getName());
-                NodeStateCopier.builder()
-                        .include(calculateEffectiveIncludePaths(DEFAULT_INCLUDE_PATHS, checkpointRoot))
-                        .merge(of("/jcr:system"))
-                        .copy(wrapSource(checkpointRoot), targetRoot);
-                copyProperties(checkpointRoot, targetRoot);
+                wrapSource(checkpointRoot).compareAgainstBaseState(previousRoot, new ApplyDiff(targetRoot));
             } else {
                 LOG.info("Applying diff to {}", checkpoint.getName());
                 checkpointRoot.compareAgainstBaseState(previousRoot, new ApplyDiff(targetRoot));
@@ -371,13 +382,12 @@ public class RepositorySidegrade {
         }
 
         NodeState sourceRoot = source.getRoot();
-        if (previousRoot == null) {
+        if (!isCompleteMigration()) {
+            sourceRoot = FilteringNodeState.wrap("/", sourceRoot, includePaths, excludePaths, excludeFragments);
+        }
+        if (previousRoot == EmptyNodeState.EMPTY_NODE) {
             LOG.info("No checkpoints found; migrating head");
-            NodeStateCopier.builder()
-                    .include(calculateEffectiveIncludePaths(DEFAULT_INCLUDE_PATHS, sourceRoot))
-                    .merge(of("/jcr:system"))
-                    .copy(wrapSource(sourceRoot), targetRoot);
-            copyProperties(sourceRoot, targetRoot);
+            wrapSource(sourceRoot).compareAgainstBaseState(previousRoot, new ApplyDiff(targetRoot));
         } else {
             LOG.info("Applying diff to head");
             sourceRoot.compareAgainstBaseState(previousRoot, new ApplyDiff(targetRoot));
@@ -498,4 +508,8 @@ public class RepositorySidegrade {
         }
         return sourceRoot;
     }
+
+    private boolean targetExists() {
+        return target.getRoot().getChildNodeEntries().iterator().hasNext();
+    }
 }

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=1794546&r1=1794545&r2=1794546&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 May  9 11:51:18 2017
@@ -124,6 +124,7 @@ public class MigrationFactory {
         sidegrade.setVerify(options.isVerify());
         sidegrade.setOnlyVerify(options.isOnlyVerify());
         sidegrade.setSkipCheckpoints(options.isSkipCheckpoints());
+        sidegrade.setForceCheckpoints(options.isForceCheckpoints());
         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=1794546&r1=1794545&r2=1794546&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 May  9 11:51:18 2017
@@ -68,6 +68,8 @@ public class MigrationOptions {
 
     private final boolean skipCheckpoints;
 
+    private final boolean forceCheckpoints;
+
     private final String srcUser;
 
     private final String srcPassword;
@@ -128,6 +130,7 @@ public class MigrationOptions {
         this.verify = args.hasOption(OptionParserFactory.VERIFY);
         this.onlyVerify = args.hasOption(OptionParserFactory.ONLY_VERIFY);
         this.skipCheckpoints = args.hasOption(OptionParserFactory.SKIP_CHECKPOINTS);
+        this.forceCheckpoints = args.hasOption(OptionParserFactory.FORCE_CHECKPOINTS);
 
         this.srcUser = args.getOption(OptionParserFactory.SRC_USER);
         this.srcPassword = args.getOption(OptionParserFactory.SRC_USER);
@@ -224,6 +227,10 @@ public class MigrationOptions {
         return skipCheckpoints;
     }
 
+    public boolean isForceCheckpoints() {
+        return forceCheckpoints;
+    }
+
     public String getSrcUser() {
         return srcUser;
     }
@@ -365,6 +372,10 @@ public class MigrationOptions {
             log.info("Checkpoints won't be migrated");
         }
 
+        if (forceCheckpoints) {
+            log.info("Checkpoints will be migrated even with the custom paths specified");
+        }
+
         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=1794546&r1=1794545&r2=1794546&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 May  9 11:51:18 2017
@@ -86,6 +86,8 @@ public class OptionParserFactory {
 
     public static final String SKIP_CHECKPOINTS = "skip-checkpoints";
 
+    public static final String FORCE_CHECKPOINTS = "force-checkpoints";
+
     public static OptionParser create() {
         OptionParser op = new OptionParser();
         addUsageOptions(op);
@@ -160,5 +162,6 @@ public class OptionParserFactory {
         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");
+        op.accepts(FORCE_CHECKPOINTS, "Copy checkpoints even if the --include,exclude,merge-paths option is specified");
     }
 }