Author: tomekr
Date: Mon Nov 21 12:33:15 2016
New Revision: 1770676

URL: http://svn.apache.org/viewvc?rev=1770676&view=rev
Log:
OAK-5112: oak-upgrade breaking versionStorage node when started with 
copy-verisions=false

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/RepositoryUpgrade.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java
    
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.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=1770676&r1=1770675&r2=1770676&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
 Mon Nov 21 12:33:15 2016
@@ -29,6 +29,7 @@ import javax.jcr.RepositoryException;
 import com.google.common.base.Function;
 import org.apache.commons.lang.StringUtils;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.plugins.version.ReadWriteVersionManager;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
@@ -46,6 +47,7 @@ import org.apache.jackrabbit.oak.upgrade
 import org.apache.jackrabbit.oak.upgrade.nodestate.report.ReportingNodeState;
 import org.apache.jackrabbit.oak.upgrade.nodestate.NodeStateCopier;
 import org.apache.jackrabbit.oak.upgrade.version.VersionCopyConfiguration;
+import org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil;
 import org.apache.jackrabbit.oak.upgrade.version.VersionableEditor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -257,6 +259,10 @@ public class RepositorySidegrade {
         try {
             if (!onlyVerify) {
                 NodeBuilder targetRoot = target.getRoot().builder();
+                if (VersionHistoryUtil.getVersionStorage(targetRoot).exists() 
&& !versionCopyConfiguration.skipOrphanedVersionsCopy()) {
+                    LOG.warn("The version storage on destination already 
exists. Orphaned version histories will be skipped.");
+                    versionCopyConfiguration.setCopyOrphanedVersions(null);
+                }
 
                 if (initializer != null) {
                     initializer.initialize(targetRoot);
@@ -307,8 +313,13 @@ public class RepositorySidegrade {
 
         final List<CommitHook> hooks = new ArrayList<CommitHook>();
         if (!versionCopyConfiguration.isCopyAll()) {
+            NodeBuilder versionStorage = 
VersionHistoryUtil.getVersionStorage(targetRoot);
+            if (!versionStorage.exists()) { // it's possible that this is a 
new repository and the version storage
+                                            // hasn't been created/copied yet
+                versionStorage = 
VersionHistoryUtil.createVersionStorage(targetRoot);
+            }
             if (!versionCopyConfiguration.skipOrphanedVersionsCopy()) {
-                copyVersionStorage(targetRoot, getVersionStorage(sourceRoot), 
getVersionStorage(targetRoot), versionCopyConfiguration);
+                copyVersionStorage(targetRoot, getVersionStorage(sourceRoot), 
versionStorage, versionCopyConfiguration);
             }
             hooks.add(new EditorHook(new 
VersionableEditor.Provider(sourceRoot, getWorkspaceName(), 
versionCopyConfiguration)));
         }

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java?rev=1770676&r1=1770675&r2=1770676&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
 Mon Nov 21 12:33:15 2016
@@ -129,6 +129,7 @@ import org.apache.jackrabbit.oak.upgrade
 import org.apache.jackrabbit.oak.upgrade.security.GroupEditorProvider;
 import org.apache.jackrabbit.oak.upgrade.security.RestrictionEditorProvider;
 import org.apache.jackrabbit.oak.upgrade.version.VersionCopyConfiguration;
+import org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil;
 import org.apache.jackrabbit.oak.upgrade.version.VersionableEditor;
 import org.apache.jackrabbit.oak.upgrade.version.VersionablePropertiesEditor;
 import org.apache.jackrabbit.spi.Name;
@@ -407,6 +408,10 @@ public class RepositoryUpgrade {
         logger.info("Copying repository content from {} to Oak", 
config.getHomeDir());
         try {
             NodeBuilder targetBuilder = target.getRoot().builder();
+            if (VersionHistoryUtil.getVersionStorage(targetBuilder).exists() 
&& !versionCopyConfiguration.skipOrphanedVersionsCopy()) {
+                logger.warn("The version storage on destination already 
exists. Orphaned version histories will be skipped.");
+                versionCopyConfiguration.setCopyOrphanedVersions(null);
+            }
             final Root upgradeRoot = new UpgradeRoot(targetBuilder);
 
             String workspaceName =

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java?rev=1770676&r1=1770675&r2=1770676&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java
 Mon Nov 21 12:33:15 2016
@@ -18,12 +18,15 @@ package org.apache.jackrabbit.oak.upgrad
 
 import static com.google.common.collect.Iterables.concat;
 import static java.util.Collections.singleton;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
 import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
 import static org.apache.jackrabbit.JcrConstants.JCR_VERSIONSTORAGE;
+import static 
org.apache.jackrabbit.oak.plugins.version.VersionConstants.REP_VERSIONSTORAGE;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
@@ -75,7 +78,15 @@ public class VersionHistoryUtil {
     }
 
     public static NodeBuilder getVersionStorage(NodeBuilder root) {
-        return root.child(JCR_SYSTEM).child(JCR_VERSIONSTORAGE);
+        return root.getChildNode(JCR_SYSTEM).getChildNode(JCR_VERSIONSTORAGE);
+    }
+
+    public static NodeBuilder createVersionStorage(NodeBuilder root) {
+        NodeBuilder vs = root.child(JCR_SYSTEM).child(JCR_VERSIONSTORAGE);
+        if (!vs.hasProperty(JCR_PRIMARYTYPE)) {
+            vs.setProperty(JCR_PRIMARYTYPE, REP_VERSIONSTORAGE, Type.NAME);
+        }
+        return vs;
     }
 
 }

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java?rev=1770676&r1=1770675&r2=1770676&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java
 Mon Nov 21 12:33:15 2016
@@ -252,6 +252,8 @@ public class CopyVersionHistoryTest exte
 
         assertMissingHistories(session,
                 VERSIONABLES_OLD, VERSIONABLES_OLD_ORPHANED, 
VERSIONABLES_YOUNG, VERSIONABLES_YOUNG_ORPHANED);
+        assertNotNull(session.getNode("/jcr:system/jcr:versionStorage")
+                .getPrimaryNodeType());
     }
 
     protected Session performCopy(VersionCopySetup setup) throws 
RepositoryException, IOException {


Reply via email to