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/20 18:35:04 UTC

svn commit: r1680633 - in /jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade: JackrabbitNodeState.java RepositoryUpgrade.java

Author: baedke
Date: Wed May 20 16:35:04 2015
New Revision: 1680633

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

Implemented basic support.

Modified:
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java

Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java?rev=1680633&r1=1680632&r2=1680633&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java Wed May 20 16:35:04 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,13 @@ 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, e);
             }
         }
         checkValidName(name);
@@ -258,7 +267,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/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=1680633&r1=1680632&r2=1680633&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 Wed May 20 16:35:04 2015
@@ -137,6 +137,8 @@ public class RepositoryUpgrade {
 
     private boolean copyBinariesByReference = false;
 
+    private boolean skipOnError = false;
+
     private List<CommitHook> customCommitHooks = null;
 
     /**
@@ -191,6 +193,14 @@ public class RepositoryUpgrade {
         this.copyBinariesByReference = copyBinariesByReference;
     }
 
+    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.
@@ -677,13 +687,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(
@@ -697,7 +707,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);