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");
}
}