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 2016/08/02 07:54:10 UTC
svn commit: r1754841 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/
oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/
oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/ ...
Author: tomekr
Date: Tue Aug 2 07:54:10 2016
New Revision: 1754841
URL: http://svn.apache.org/viewvc?rev=1754841&view=rev
Log:
OAK-4626: Use oak-upgrade to initialize the DocumentMK local cache nodestore
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/DelegatingDocumentNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/PathFilteringDiff.java
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
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/DelegatingDocumentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/DelegatingDocumentNodeState.java?rev=1754841&r1=1754840&r2=1754841&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/DelegatingDocumentNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/DelegatingDocumentNodeState.java Tue Aug 2 07:54:10 2016
@@ -44,7 +44,7 @@ import static org.apache.jackrabbit.oak.
* so as to expose it as an {@link AbstractDocumentNodeState} by extracting
* the meta properties which are stored as hidden properties
*/
-class DelegatingDocumentNodeState extends AbstractDocumentNodeState {
+public class DelegatingDocumentNodeState extends AbstractDocumentNodeState {
//Hidden props holding DocumentNodeState meta properties
static final String PROP_PATH = ":doc-path";
static final String PROP_REVISION = ":doc-rev";
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/PathFilteringDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/PathFilteringDiff.java?rev=1754841&r1=1754840&r2=1754841&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/PathFilteringDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/PathFilteringDiff.java Tue Aug 2 07:54:10 2016
@@ -36,7 +36,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty;
-class PathFilteringDiff extends ApplyDiff {
+public class PathFilteringDiff extends ApplyDiff {
private static final Logger logger = LoggerFactory.getLogger(PathFilteringDiff.class);
private final DiffContext ctx;
private final AbstractDocumentNodeState parent;
@@ -100,7 +100,7 @@ class PathFilteringDiff extends ApplyDif
return (AbstractDocumentNodeState) state;
}
- static void copyMetaProperties(AbstractDocumentNodeState state, NodeBuilder builder) {
+ public static void copyMetaProperties(AbstractDocumentNodeState state, NodeBuilder builder) {
builder.setProperty(asPropertyState(PROP_REVISION, state.getRootRevision()));
builder.setProperty(asPropertyState(PROP_LAST_REV, state.getLastRevision()));
builder.setProperty(createProperty(PROP_PATH, state.getPath()));
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=1754841&r1=1754840&r2=1754841&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 Aug 2 07:54:10 2016
@@ -30,11 +30,19 @@ import com.google.common.base.Function;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.document.AbstractDocumentNodeState;
+import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.NodeStateDiffer;
+import org.apache.jackrabbit.oak.plugins.document.secondary.DelegatingDocumentNodeState;
+import org.apache.jackrabbit.oak.plugins.document.secondary.PathFilteringDiff;
+import org.apache.jackrabbit.oak.plugins.index.PathFilter;
import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.EditorHook;
+import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
+import org.apache.jackrabbit.oak.spi.state.ApplyDiff;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -97,6 +105,8 @@ public class RepositorySidegrade {
private boolean skipInitialization = false;
+ private boolean addSecondaryMetadata = false;
+
private List<CommitHook> customCommitHooks = null;
VersionCopyConfiguration versionCopyConfiguration = new VersionCopyConfiguration();
@@ -221,6 +231,10 @@ public class RepositorySidegrade {
this.skipInitialization = skipInitialization;
}
+ public void setAddSecondaryMetadata(boolean addSecondaryMetadata) {
+ this.addSecondaryMetadata = addSecondaryMetadata;
+ }
+
/**
* Same as {@link #copy(RepositoryInitializer)}, but with no custom initializer.
*/
@@ -264,11 +278,33 @@ public class RepositorySidegrade {
}
copyState(sourceRoot, targetRoot);
+ if (addSecondaryMetadata && source instanceof DocumentNodeStore) {
+ doAddSecondaryMetadata();
+ }
} catch (Exception e) {
throw new RepositoryException("Failed to copy content", e);
}
}
+ private void doAddSecondaryMetadata() throws CommitFailedException {
+ LOG.info("Copying secondary metadata");
+
+ AbstractDocumentNodeState sourceRoot = (AbstractDocumentNodeState) source.getRoot();
+ NodeState secondaryRoot = target.getRoot();
+
+ NodeState base = DelegatingDocumentNodeState.wrapIfPossible(secondaryRoot, NodeStateDiffer.DEFAULT_DIFFER);
+ NodeBuilder builder = secondaryRoot.builder();
+
+ // Copy the root node meta properties
+ PathFilteringDiff.copyMetaProperties(sourceRoot, builder);
+
+ // Apply the rest of properties
+ ApplyDiff diff = new PathFilteringDiff(builder, new PathFilter(includePaths, excludePaths), sourceRoot);
+ sourceRoot.compareAgainstBaseState(base, diff);
+
+ target.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+ }
+
private void removeCheckpointReferences(NodeBuilder builder) throws CommitFailedException {
// removing references to the checkpoints,
// which don't exist in the new repository
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=1754841&r1=1754840&r2=1754841&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 Aug 2 07:54:10 2016
@@ -118,6 +118,7 @@ public class MigrationFactory {
sidegrade.setFilterLongNames(stores.getSrcType().isSupportLongNames() && !stores.getDstType().isSupportLongNames());
sidegrade.setSkipInitialization(options.isSkipInitialization());
sidegrade.setIncludeIndex(options.isIncludeIndex());
+ sidegrade.setAddSecondaryMetadata(options.isAddSecondaryMetadata());
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=1754841&r1=1754840&r2=1754841&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 Aug 2 07:54:10 2016
@@ -30,6 +30,8 @@ public class MigrationOptions {
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
+ private static final boolean ADD_SECONDARY_METADATA = Boolean.getBoolean("oak.upgrade.addSecondaryMetadata");
+
private final boolean copyBinariesByReference;
private final boolean mmap;
@@ -147,6 +149,10 @@ public class MigrationOptions {
return ignoreMissingBinaries;
}
+ public boolean isAddSecondaryMetadata() {
+ return ADD_SECONDARY_METADATA;
+ }
+
private void logOptions() {
if (copyBinariesByReference) {
log.info("DataStore needs to be shared with new repository");
@@ -202,6 +208,10 @@ public class MigrationOptions {
log.info("Missing binaries won't break the migration");
}
+ if (ADD_SECONDARY_METADATA) {
+ log.info("Secondary metadata will be added");
+ }
+
log.info("Cache size: {} MB", cacheSizeInMB);
}