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 ba...@apache.org on 2015/05/27 19:12:49 UTC

svn commit: r1682082 - in /jackrabbit/oak/branches/1.2: ./ oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java

Author: baedke
Date: Wed May 27 17:12:49 2015
New Revision: 1682082

URL: http://svn.apache.org/r1682082
Log:
OAK-2893: RepositoryUpgrade.copy() should optionally continue on errors.

Merged changes 1680633, 1680643 from trunk.

Modified:
    jackrabbit/oak/branches/1.2/   (props changed)
    jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
    jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java

Propchange: jackrabbit/oak/branches/1.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed May 27 17:12:49 2015
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414,1673436,1673644,1673662-1673664,1673669,1673695,1674046,1674065,1674075,1674107,1674228,1674880,1675054-1675055,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679235,1680182,1680222,1680232,1680236,1680461,1680805-1680806,1680903,1681282,1681767,1681918
+/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414,1673436,1673644,1673662-1673664,1673669,1673695,1674046,1674065,1674075,1674107,1674228,1674880,1675054-1675055,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679235,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680805-1680806,1680903,1681282,1681767,1681918
 /jackrabbit/trunk:1345480

Modified: jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java?rev=1682082&r1=1682081&r2=1682082&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java (original)
+++ jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java Wed May 27 17:12:49 2015
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.upgrad
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Iterables.addAll;
+import static com.google.common.collect.Iterables.skip;
 import static com.google.common.collect.Lists.newArrayList;
 import static com.google.common.collect.Lists.newArrayListWithCapacity;
 import static com.google.common.collect.Maps.newHashMap;
@@ -120,6 +121,8 @@ class JackrabbitNodeState extends Abstra
 
     private final TypePredicate isFrozenNode;
 
+    private final boolean skipOnError;
+
     /**
      * Source namespace mappings (URI -< prefix).
      */
@@ -134,7 +137,8 @@ class JackrabbitNodeState extends Abstra
     private final Map<String, PropertyState> properties;
 
     private JackrabbitNodeState(
-            JackrabbitNodeState parent, String name, NodePropBundle bundle) {
+            JackrabbitNodeState parent, String name, NodePropBundle bundle,
+            boolean skipOnError) {
         this.parent = parent;
         this.name = name;
         this.path = null;
@@ -150,6 +154,7 @@ class JackrabbitNodeState extends Abstra
         this.useBinaryReferences = parent.useBinaryReferences;
         this.properties = createProperties(bundle);
         this.nodes = createNodes(bundle);
+        this.skipOnError = skipOnError;
         setChildOrder();
         setVersionablePaths();
         fixFrozenUuid();
@@ -160,7 +165,7 @@ class JackrabbitNodeState extends Abstra
             PersistenceManager source, NodeState root,
             Map<String, String> uriToPrefix, NodeId id, String path,
             String workspaceName, Map<String, String> versionablePaths,
-            boolean useBinaryReferences) {
+            boolean useBinaryReferences, boolean skipOnError) {
         this.parent = null;
         this.name = null;
         this.path = path;
@@ -174,6 +179,7 @@ class JackrabbitNodeState extends Abstra
         this.uriToPrefix = uriToPrefix;
         this.versionablePaths = versionablePaths;
         this.useBinaryReferences = useBinaryReferences;
+        this.skipOnError = skipOnError;
         try {
             NodePropBundle bundle = loader.loadBundle(id);
             this.properties = createProperties(bundle);
@@ -235,10 +241,16 @@ class JackrabbitNodeState extends Abstra
         if (id != null) {
             try {
                 return new JackrabbitNodeState(
-                        this, name, loader.loadBundle(id));
+                        this, name, loader.loadBundle(id), skipOnError);
             } catch (ItemStateException e) {
-                throw new IllegalStateException(
-                        "Unable to access child node " + name, e);
+                if (!skipOnError) {
+                    throw new IllegalStateException(
+                            "Unable to access child node " + name, e);
+                }
+                warn("Skipping broken child node entry " + name + " and changing the primary type to nt:unstructured", e);
+                properties.put(JCR_PRIMARYTYPE, PropertyStates.createProperty(
+                        JCR_PRIMARYTYPE, NT_UNSTRUCTURED, Type.NAME));
+
             }
         }
         checkValidName(name);
@@ -258,7 +270,7 @@ class JackrabbitNodeState extends Abstra
             String name = entry.getKey();
             try {
                 JackrabbitNodeState child = new JackrabbitNodeState(
-                        this, name, loader.loadBundle(entry.getValue()));
+                        this, name, loader.loadBundle(entry.getValue()), skipOnError);
                 entries.add(new MemoryChildNodeEntry(name, child));
             } catch (ItemStateException e) {
                 warn("Skipping broken child node entry " + name, e);

Modified: jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java?rev=1682082&r1=1682081&r2=1682082&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java (original)
+++ jackrabbit/oak/branches/1.2/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java Wed May 27 17:12:49 2015
@@ -139,6 +139,8 @@ public class RepositoryUpgrade {
 
     private boolean earlyShutdown = false;
 
+    private boolean skipOnError = false;
+
     private List<CommitHook> customCommitHooks = null;
 
     /**
@@ -201,6 +203,14 @@ public class RepositoryUpgrade {
         this.earlyShutdown = earlyShutdown;
     }
 
+    public boolean isSkipOnError() {
+        return skipOnError;
+    }
+
+    public void setSkipOnError(boolean skipOnError) {
+        this.skipOnError = skipOnError;
+    }
+
     /**
      * Returns the list of custom CommitHooks to be applied before the final
      * type validation, reference and indexing hooks.
@@ -687,13 +697,13 @@ public class RepositoryUpgrade {
         copyState(system, JCR_VERSIONSTORAGE, new JackrabbitNodeState(
                 pm, root, uriToPrefix, VERSION_STORAGE_NODE_ID,
                 "/jcr:system/jcr:versionStorage",
-                workspaceName, versionablePaths, copyBinariesByReference));
+                workspaceName, versionablePaths, copyBinariesByReference, skipOnError));
 
         logger.info("Copying activities");
         copyState(system, "jcr:activities", new JackrabbitNodeState(
                 pm, root, uriToPrefix, ACTIVITIES_NODE_ID,
                 "/jcr:system/jcr:activities",
-                workspaceName, versionablePaths, copyBinariesByReference));
+                workspaceName, versionablePaths, copyBinariesByReference, skipOnError));
     }
 
     private String copyWorkspace(
@@ -707,7 +717,7 @@ public class RepositoryUpgrade {
 
         NodeState state = new JackrabbitNodeState(
                 pm, root, uriToPrefix, ROOT_NODE_ID, "/",
-                workspaceName, versionablePaths, copyBinariesByReference);
+                workspaceName, versionablePaths, copyBinariesByReference, skipOnError);
 
         for (PropertyState property : state.getProperties()) {
             builder.setProperty(property);