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);
         }


Reply via email to