Author: jukka
Date: Wed Mar 19 01:36:06 2014
New Revision: 1579112
URL: http://svn.apache.org/r1579112
Log:
OAK-1565: Optimize repository upgrade by loading bundles where possible
Improved logging of the upgrade process
Modified:
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/BundleLoader.java
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/BundleLoader.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/BundleLoader.java?rev=1579112&r1=1579111&r2=1579112&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/BundleLoader.java
(original)
+++
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/BundleLoader.java
Wed Mar 19 01:36:06 2014
@@ -73,11 +73,10 @@ class BundleLoader {
NodeState state = pm.load(id);
NodePropBundle bundle = new NodePropBundle(state);
for (Name name : state.getPropertyNames()) {
- if (NameConstants.JCR_PRIMARYTYPE.equals(name)) {
- } else if (NameConstants.JCR_MIXINTYPES.equals(name)) {
- } else if (NameConstants.JCR_UUID.equals(name)) {
+ if (NameConstants.JCR_UUID.equals(name)) {
bundle.setReferenceable(true);
- } else {
+ } else if (!NameConstants.JCR_PRIMARYTYPE.equals(name)
+ && !NameConstants.JCR_MIXINTYPES.equals(name)) {
bundle.addProperty(new PropertyEntry(
pm.load(new PropertyId(id, name))));
}
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=1579112&r1=1579111&r2=1579112&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 Mar 19 01:36:06 2014
@@ -53,6 +53,7 @@ import org.apache.jackrabbit.core.value.
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.memory.AbstractBlob;
import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
import org.apache.jackrabbit.oak.plugins.memory.MemoryChildNodeEntry;
@@ -72,6 +73,21 @@ class JackrabbitNodeState extends Abstra
private static final Logger log =
LoggerFactory.getLogger(JackrabbitNodeState.class);
+ private static long count = 0;
+
+ private static void logNewNode(JackrabbitNodeState state) {
+ count++;
+ if (count % 10000 == 0) {
+ log.info("Migrating node #" + count + ": " + state.getPath());
+ }
+ }
+
+ private final JackrabbitNodeState parent;
+
+ private final String name;
+
+ private String path;
+
/**
* Bundle loader based on the source persistence manager.
*/
@@ -93,7 +109,10 @@ class JackrabbitNodeState extends Abstra
private final boolean useBinaryReferences;
private JackrabbitNodeState(
- JackrabbitNodeState parent, NodePropBundle bundle) {
+ JackrabbitNodeState parent, String name, NodePropBundle bundle) {
+ this.parent = parent;
+ this.name = name;
+ this.path = null;
this.loader = parent.loader;
this.isReferenceable = parent.isReferenceable;
this.isOrderable = parent.isOrderable;
@@ -101,12 +120,16 @@ class JackrabbitNodeState extends Abstra
this.nodes = createNodes(bundle);
this.properties = createProperties(bundle);
this.useBinaryReferences = parent.useBinaryReferences;
+ logNewNode(this);
}
JackrabbitNodeState(
PersistenceManager source, NodeState root,
- Map<String, String> uriToPrefix, NodeId id,
+ Map<String, String> uriToPrefix, NodeId id, String path,
boolean useBinaryReferences) {
+ this.parent = null;
+ this.name = null;
+ this.path = path;
this.loader = new BundleLoader(source);
this.isReferenceable = new TypePredicate(root, MIX_REFERENCEABLE);
this.isOrderable = TypePredicate.isOrderable(root);
@@ -119,6 +142,7 @@ class JackrabbitNodeState extends Abstra
throw new IllegalStateException("Unable to access node " + id, e);
}
this.useBinaryReferences = useBinaryReferences;
+ logNewNode(this);
}
//---------------------------------------------------------< NodeState >--
@@ -163,7 +187,8 @@ class JackrabbitNodeState extends Abstra
NodeId id = nodes.get(name);
if (id != null) {
try {
- return new JackrabbitNodeState(this, loader.loadBundle(id));
+ return new JackrabbitNodeState(
+ this, name, loader.loadBundle(id));
} catch (ItemStateException e) {
throw new IllegalStateException(
"Unable to access child node " + name, e);
@@ -185,7 +210,7 @@ class JackrabbitNodeState extends Abstra
String name = entry.getKey();
try {
JackrabbitNodeState child = new JackrabbitNodeState(
- this, loader.loadBundle(entry.getValue()));
+ this, name, loader.loadBundle(entry.getValue()));
entries.add(new MemoryChildNodeEntry(name, child));
} catch (ItemStateException e) {
warn("Skipping broken child node entry " + name, e);
@@ -483,12 +508,19 @@ class JackrabbitNodeState extends Abstra
return builder.toString();
}
+ private String getPath() {
+ if (path == null) { // implies: parent != null && name != null
+ path = PathUtils.concat(parent.getPath(), name);
+ }
+ return path;
+ }
+
private void warn(String message) {
- log.warn(message);
+ log.warn(getPath() + ": " + message);
}
private void warn(String message, Throwable cause) {
- log.warn(message, cause);
+ log.warn(getPath() + ": " + 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=1579112&r1=1579111&r2=1579112&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 Mar 19 01:36:06 2014
@@ -224,6 +224,7 @@ public class RepositoryUpgrade {
copyVersionStore(builder, root, uriToPrefix, idxToPrefix);
copyWorkspaces(builder, root, uriToPrefix, idxToPrefix);
+ logger.info("Applying default commit hooks");
String groupsPath;
UserManagerConfig userConfig =
config.getSecurityConfig().getSecurityManagerConfig().getUserManagerConfig();
if (userConfig != null) {
@@ -549,11 +550,11 @@ public class RepositoryUpgrade {
NodeBuilder system = builder.child(JCR_SYSTEM);
system.setChildNode(JCR_VERSIONSTORAGE, new JackrabbitNodeState(
- pm, root, uriToPrefix,
- VERSION_STORAGE_NODE_ID, copyBinariesByReference));
+ pm, root, uriToPrefix, VERSION_STORAGE_NODE_ID,
+ "/jcr:system/jcr:versionStorage", copyBinariesByReference));
system.setChildNode("jcr:activities", new JackrabbitNodeState(
- pm, root, uriToPrefix,
- ACTIVITIES_NODE_ID, copyBinariesByReference));
+ pm, root, uriToPrefix, ACTIVITIES_NODE_ID,
+ "/jcr:system/jcr:activities", copyBinariesByReference));
}
private void copyWorkspaces(
@@ -570,7 +571,7 @@ public class RepositoryUpgrade {
source.getWorkspaceInfo(name).getPersistenceManager();
NodeState state = new JackrabbitNodeState(
- pm, root, uriToPrefix, ROOT_NODE_ID, copyBinariesByReference);
+ pm, root, uriToPrefix, ROOT_NODE_ID, "/",
copyBinariesByReference);
for (PropertyState property : state.getProperties()) {
builder.setProperty(property);
}