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 ju...@apache.org on 2013/12/02 12:08:11 UTC
svn commit: r1546960 - in
/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade:
JackrabbitNodeState.java RepositoryUpgrade.java
Author: jukka
Date: Mon Dec 2 11:08:10 2013
New Revision: 1546960
URL: http://svn.apache.org/r1546960
Log:
OAK-1243: Upgrade fails if source repository is broken
Catch and log exceptions, and replace with empty/missing content instead of failing the entire upgrade
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=1546960&r1=1546959&r2=1546960&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 Mon Dec 2 11:08:10 2013
@@ -21,6 +21,7 @@ import static com.google.common.base.Pre
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.newArrayListWithCapacity;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
@@ -50,9 +51,14 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.util.ISO8601;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
class JackrabbitNodeState extends AbstractNodeState {
+ private static final Logger log =
+ LoggerFactory.getLogger(JackrabbitNodeState.class);
+
/**
* Source persistence manager.
*/
@@ -63,27 +69,25 @@ class JackrabbitNodeState extends Abstra
*/
private final NamespaceRegistry registry;
- private final NodeId id;
-
- private NodeState state = null;
+ private final NodeState state;
- JackrabbitNodeState(
+ private JackrabbitNodeState(
PersistenceManager source, NamespaceRegistry registry,
- NodeId id) {
+ NodeState state) {
this.source = source;
this.registry = registry;
- this.id = id;
+ this.state = state;
}
- private NodeState getState() {
- if (state == null) {
- try {
- state = source.load(id);
- } catch (ItemStateException e) {
- throw new IllegalStateException(e);
- }
+ JackrabbitNodeState(
+ PersistenceManager source, NamespaceRegistry registry, NodeId id) {
+ this.source = source;
+ this.registry = registry;
+ try {
+ this.state = source.load(id);
+ } catch (ItemStateException e) {
+ throw new IllegalStateException("Unable to access node " + id, e);
}
- return state;
}
//---------------------------------------------------------< NodeState >--
@@ -96,19 +100,21 @@ class JackrabbitNodeState extends Abstra
@Override
public Iterable<org.apache.jackrabbit.oak.api.PropertyState> getProperties() {
List<org.apache.jackrabbit.oak.api.PropertyState> properties = newArrayList();
- for (Name name : getState().getPropertyNames()) {
+ for (Name name : state.getPropertyNames()) {
+ String oakName = createName(name);
try {
- PropertyState property = source.load(new PropertyId(id, name));
+ PropertyState property = source.load(
+ new PropertyId(state.getNodeId(), name));
int type = property.getType();
if (property.isMultiValued()) {
properties.add(createProperty(
- createName(name), type, property.getValues()));
+ oakName, type, property.getValues()));
} else {
properties.add(createProperty(
- createName(name), type, property.getValues()[0]));
+ oakName, type, property.getValues()[0]));
}
} catch (Exception e) {
- throw new IllegalStateException(e);
+ warn("Unable to access property " + oakName, e);
}
}
return properties;
@@ -127,20 +133,19 @@ class JackrabbitNodeState extends Abstra
@Override
public Iterable<MemoryChildNodeEntry> getChildNodeEntries() {
List<MemoryChildNodeEntry> entries = newArrayList();
- for (ChildNodeEntry entry : getState().getChildNodeEntries()) {
- try {
- String name = createName(entry.getName());
- int index = entry.getIndex();
- if (index > 1) {
- name = name + '[' + index + ']';
- }
-
- JackrabbitNodeState state = new JackrabbitNodeState(
- source, registry, entry.getId());
+ for (ChildNodeEntry entry : state.getChildNodeEntries()) {
+ String name = createName(entry.getName());
+ int index = entry.getIndex();
+ if (index > 1) {
+ name = name + '[' + index + ']';
+ }
- entries.add(new MemoryChildNodeEntry(name, state));
- } catch (RepositoryException e) {
- throw new IllegalStateException(e);
+ try {
+ JackrabbitNodeState child = new JackrabbitNodeState(
+ source, registry, source.load(entry.getId()));
+ entries.add(new MemoryChildNodeEntry(name, child));
+ } catch (ItemStateException e) {
+ warn("Unable to access child entry " + name, e);
}
}
return entries;
@@ -287,7 +292,8 @@ class JackrabbitNodeState extends Abstra
try {
return value.getLength();
} catch (RepositoryException e) {
- throw new IllegalStateException(e);
+ warn("Unable to access blob length", e);
+ return 0;
}
}
@Override
@@ -295,19 +301,25 @@ class JackrabbitNodeState extends Abstra
try {
return value.getStream();
} catch (RepositoryException e) {
- throw new IllegalStateException(e);
+ warn("Unable to access blob contents", e);
+ return new ByteArrayInputStream(new byte[0]);
}
}
};
}
- private String createName(Name name) throws RepositoryException {
+ private String createName(Name name) {
String uri = name.getNamespaceURI();
String local = name.getLocalName();
if (uri == null || uri.isEmpty()) {
return local;
} else {
- return registry.getPrefix(uri) + ":" + local;
+ try {
+ return registry.getPrefix(uri) + ":" + local;
+ } catch (RepositoryException e) {
+ warn("Unable to create Oak name from " + name, e);
+ return "{" + uri + "}" + local;
+ }
}
}
@@ -332,11 +344,19 @@ class JackrabbitNodeState extends Abstra
} else if (element.denotesCurrent()) {
builder.append('.');
} else {
- throw new RepositoryException(
- "Unknown path element: " + element);
+ warn("Unknown element in path: " + path);
+ builder.append(element.getString());
}
}
return builder.toString();
}
+ private void warn(String message) {
+ log.warn(message);
+ }
+
+ private void warn(String message, Throwable cause) {
+ log.warn(message, cause);
+ }
+
}
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=1546960&r1=1546959&r2=1546960&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 Dec 2 11:08:10 2013
@@ -530,12 +530,10 @@ public class RepositoryUpgrade {
NamespaceRegistry nr =source.getNamespaceRegistry();
NodeBuilder system = root.child(JCR_SYSTEM);
- system.setChildNode(
- JCR_VERSIONSTORAGE,
- new JackrabbitNodeState(pm, nr, VERSION_STORAGE_NODE_ID));
- system.setChildNode(
- "jcr:activities",
- new JackrabbitNodeState(pm, nr, ACTIVITIES_NODE_ID));
+ system.setChildNode(JCR_VERSIONSTORAGE, new JackrabbitNodeState(
+ pm, nr, VERSION_STORAGE_NODE_ID));
+ system.setChildNode("jcr:activities", new JackrabbitNodeState(
+ pm, nr, ACTIVITIES_NODE_ID));
}
private void copyWorkspaces(