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