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 to...@apache.org on 2016/09/06 09:38:30 UTC
svn commit: r1759392 - in
/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade:
./ version/
Author: tomekr
Date: Tue Sep 6 09:38:29 2016
New Revision: 1759392
URL: http://svn.apache.org/viewvc?rev=1759392&view=rev
Log:
OAK-4761: Reduce the number of calls to /jcr:system/jcr:versionStorage during the upgrade
Modified:
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionCopier.java
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionableEditor.java
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionablePropertiesEditor.java
Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java?rev=1759392&r1=1759391&r2=1759392&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java Tue Sep 6 09:38:29 2016
@@ -67,6 +67,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.upgrade.RepositoryUpgrade.markIndexesToBeRebuilt;
import static org.apache.jackrabbit.oak.upgrade.nodestate.NodeStateCopier.copyProperties;
import static org.apache.jackrabbit.oak.upgrade.version.VersionCopier.copyVersionStorage;
+import static org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil.getVersionStorage;
public class RepositorySidegrade {
@@ -298,7 +299,7 @@ public class RepositorySidegrade {
}
if (!versionCopyConfiguration.skipOrphanedVersionsCopy()) {
- copyVersionStorage(sourceRoot, targetRoot, versionCopyConfiguration);
+ copyVersionStorage(targetRoot, getVersionStorage(sourceRoot), getVersionStorage(targetRoot), versionCopyConfiguration);
}
final List<CommitHook> hooks = new ArrayList<CommitHook>();
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=1759392&r1=1759391&r2=1759392&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 Tue Sep 6 09:38:29 2016
@@ -145,6 +145,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.jackrabbit.oak.upgrade.version.VersionCopier.copyVersionStorage;
+import static org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil.getVersionStorage;
public class RepositoryUpgrade {
@@ -491,7 +492,7 @@ public class RepositoryUpgrade {
if (!versionCopyConfiguration.skipOrphanedVersionsCopy()) {
logger.info("Copying version storage");
watch.reset().start();
- copyVersionStorage(sourceRoot, targetBuilder, versionCopyConfiguration);
+ copyVersionStorage(targetBuilder, getVersionStorage(sourceRoot), getVersionStorage(targetBuilder), versionCopyConfiguration);
targetBuilder.getNodeState(); // on TarMK this does call triggers the actual copy
logger.info("Version storage copied in {}s ({})", watch.elapsed(TimeUnit.SECONDS), watch);
} else {
Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionCopier.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionCopier.java?rev=1759392&r1=1759391&r2=1759392&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionCopier.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionCopier.java Tue Sep 6 09:38:29 2016
@@ -17,8 +17,6 @@
package org.apache.jackrabbit.oak.upgrade.version;
import static org.apache.jackrabbit.JcrConstants.JCR_CREATED;
-import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
-import static org.apache.jackrabbit.JcrConstants.JCR_VERSIONSTORAGE;
import static org.apache.jackrabbit.JcrConstants.NT_VERSION;
import java.util.Calendar;
@@ -38,7 +36,7 @@ import org.apache.jackrabbit.util.ISO860
import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.REINDEX_PROPERTY_NAME;
import static org.apache.jackrabbit.oak.plugins.version.VersionConstants.VERSION_STORE_PATH;
-import static org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil.getVersionHistoryPath;
+import static org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil.getRelativeVersionHistoryPath;
import static org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil.getVersionHistoryNodeState;
/**
@@ -49,20 +47,22 @@ public class VersionCopier {
private final TypePredicate isVersion;
- private final NodeState sourceRoot;
+ private final NodeState sourceVersionStorage;
+
+ private final NodeBuilder targetVersionStorage;
private final NodeBuilder targetRoot;
- public VersionCopier(NodeState sourceRoot, NodeBuilder targetRoot) {
+ public VersionCopier(NodeBuilder targetRoot, NodeState sourceVersionStorage, NodeBuilder targetVersionStorage) {
this.isVersion = new TypePredicate(targetRoot.getNodeState(), NT_VERSION);
- this.sourceRoot = sourceRoot;
+ this.sourceVersionStorage = sourceVersionStorage;
+ this.targetVersionStorage = targetVersionStorage;
this.targetRoot = targetRoot;
}
- public static void copyVersionStorage(NodeState sourceRoot, NodeBuilder targetRoot, VersionCopyConfiguration config) {
- final NodeState versionStorage = sourceRoot.getChildNode(JCR_SYSTEM).getChildNode(JCR_VERSIONSTORAGE);
- final Iterator<NodeState> versionStorageIterator = new DescendantsIterator(versionStorage, 3);
- final VersionCopier versionCopier = new VersionCopier(sourceRoot, targetRoot);
+ public static void copyVersionStorage(NodeBuilder targetRoot, NodeState sourceVersionStorage, NodeBuilder targetVersionStorage, VersionCopyConfiguration config) {
+ final Iterator<NodeState> versionStorageIterator = new DescendantsIterator(sourceVersionStorage, 3);
+ final VersionCopier versionCopier = new VersionCopier(targetRoot, sourceVersionStorage, targetVersionStorage);
boolean versionsCopied = false;
while (versionStorageIterator.hasNext()) {
@@ -96,15 +96,15 @@ public class VersionCopier {
}
private boolean doCopyVersionHistory(String versionableUuid, Calendar minDate) {
- final String versionHistoryPath = getVersionHistoryPath(versionableUuid);
- final NodeState sourceVersionHistory = getVersionHistoryNodeState(sourceRoot, versionableUuid);
+ final String versionHistoryPath = getRelativeVersionHistoryPath(versionableUuid);
+ final NodeState sourceVersionHistory = getVersionHistoryNodeState(sourceVersionStorage, versionableUuid);
final Calendar lastModified = getVersionHistoryLastModified(sourceVersionHistory);
if (sourceVersionHistory.exists() && (lastModified.after(minDate) || minDate.getTimeInMillis() == 0)) {
NodeStateCopier.builder()
.include(versionHistoryPath)
.merge(VERSION_STORE_PATH)
- .copy(sourceRoot, targetRoot);
+ .copy(sourceVersionStorage, targetVersionStorage);
return true;
}
return false;
Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java?rev=1759392&r1=1759391&r2=1759392&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java Tue Sep 6 09:38:29 2016
@@ -31,10 +31,10 @@ import com.google.common.base.Joiner;
public class VersionHistoryUtil {
- public static String getVersionHistoryPath(String versionableUuid) {
+ public static String getRelativeVersionHistoryPath(String versionableUuid) {
return Joiner.on('/').join(concat(
singleton(""),
- getVersionHistoryPathSegments(versionableUuid),
+ getRelativeVersionHistoryPathSegments(versionableUuid),
singleton(versionableUuid)));
}
@@ -46,30 +46,36 @@ public class VersionHistoryUtil {
* @return The NodeState corresponding to the version history, or {@code null}
* if it does not exist.
*/
- static NodeState getVersionHistoryNodeState(NodeState root, String versionableUuid) {
- NodeState historyParent = root;
- for (String segment : getVersionHistoryPathSegments(versionableUuid)) {
+ static NodeState getVersionHistoryNodeState(NodeState versionStorage, String versionableUuid) {
+ NodeState historyParent = versionStorage;
+ for (String segment : getRelativeVersionHistoryPathSegments(versionableUuid)) {
historyParent = historyParent.getChildNode(segment);
}
return historyParent.getChildNode(versionableUuid);
}
- static NodeBuilder getVersionHistoryBuilder(NodeBuilder root, String versionableUuid) {
- NodeBuilder history = root;
- for (String segment : getVersionHistoryPathSegments(versionableUuid)) {
+ static NodeBuilder getVersionHistoryBuilder(NodeBuilder versionStorage, String versionableUuid) {
+ NodeBuilder history = versionStorage;
+ for (String segment : getRelativeVersionHistoryPathSegments(versionableUuid)) {
history = history.getChildNode(segment);
}
return history.getChildNode(versionableUuid);
}
- private static List<String> getVersionHistoryPathSegments(String versionableUuid) {
+ private static List<String> getRelativeVersionHistoryPathSegments(String versionableUuid) {
final List<String> segments = new ArrayList<String>();
- segments.add(JCR_SYSTEM);
- segments.add(JCR_VERSIONSTORAGE);
for (int i = 0; i < 3; i++) {
segments.add(versionableUuid.substring(i * 2, i * 2 + 2));
}
return segments;
}
+ public static NodeState getVersionStorage(NodeState root) {
+ return root.getChildNode(JCR_SYSTEM).getChildNode(JCR_VERSIONSTORAGE);
+ }
+
+ public static NodeBuilder getVersionStorage(NodeBuilder root) {
+ return root.child(JCR_SYSTEM).child(JCR_VERSIONSTORAGE);
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionableEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionableEditor.java?rev=1759392&r1=1759391&r2=1759392&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionableEditor.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionableEditor.java Tue Sep 6 09:38:29 2016
@@ -47,6 +47,7 @@ import static org.apache.jackrabbit.JcrC
import static org.apache.jackrabbit.oak.plugins.memory.MultiGenericPropertyState.nameProperty;
import static org.apache.jackrabbit.oak.plugins.version.VersionConstants.MIX_REP_VERSIONABLE_PATHS;
import static org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil.getVersionHistoryNodeState;
+import static org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil.getVersionStorage;
/**
* The VersionableEditor provides two possible ways to handle
@@ -70,6 +71,8 @@ public class VersionableEditor extends D
private final NodeBuilder rootBuilder;
+ private final NodeBuilder versionStorage;
+
private final TypePredicate isReferenceable;
private final TypePredicate isVersionable;
@@ -80,16 +83,17 @@ public class VersionableEditor extends D
private String path;
- private VersionableEditor(Provider provider, NodeBuilder builder) {
+ private VersionableEditor(Provider provider, NodeBuilder rootBuilder) {
+ this.rootBuilder = rootBuilder;
+ this.versionStorage = getVersionStorage(rootBuilder);
+ this.vMgr = new ReadWriteVersionManager(versionStorage, rootBuilder);
+
this.provider = provider;
- this.rootBuilder = builder;
- this.isVersionable = new TypePredicate(builder.getNodeState(), MIX_VERSIONABLE);
- this.isReferenceable = new TypePredicate(builder.getNodeState(), MIX_REFERENCEABLE);
- this.versionCopier = new VersionCopier(provider.sourceRoot, builder);
+ this.isVersionable = new TypePredicate(rootBuilder.getNodeState(), MIX_VERSIONABLE);
+ this.isReferenceable = new TypePredicate(rootBuilder.getNodeState(), MIX_REFERENCEABLE);
+ this.versionCopier = new VersionCopier(rootBuilder, getVersionStorage(provider.sourceRoot), versionStorage);
this.path = "/";
- NodeBuilder vsRoot = rootBuilder.child(NodeTypeConstants.JCR_SYSTEM).child(NodeTypeConstants.JCR_VERSIONSTORAGE);
- this.vMgr = new ReadWriteVersionManager(vsRoot, rootBuilder);
}
public static class Provider implements EditorProvider {
@@ -107,8 +111,8 @@ public class VersionableEditor extends D
}
@Override
- public Editor getRootEditor(NodeState before, NodeState after, NodeBuilder builder, CommitInfo info) throws CommitFailedException {
- return new VersionableEditor(this, builder);
+ public Editor getRootEditor(NodeState before, NodeState after, NodeBuilder rootBuilder, CommitInfo info) throws CommitFailedException {
+ return new VersionableEditor(this, rootBuilder);
}
}
@@ -159,13 +163,13 @@ public class VersionableEditor extends D
}
private void setVersionablePath(String versionableUuid) {
- final NodeBuilder versionHistory = VersionHistoryUtil.getVersionHistoryBuilder(rootBuilder, versionableUuid);
+ final NodeBuilder versionHistory = VersionHistoryUtil.getVersionHistoryBuilder(versionStorage, versionableUuid);
versionHistory.setProperty(provider.workspaceName, path, Type.PATH);
addMixin(versionHistory, MIX_REP_VERSIONABLE_PATHS);
}
private boolean isVersionHistoryExists(String versionableUuid) {
- return getVersionHistoryNodeState(rootBuilder.getNodeState(), versionableUuid).exists();
+ return getVersionHistoryNodeState(versionStorage.getNodeState(), versionableUuid).exists();
}
private void removeVersionProperties(final NodeBuilder versionableBuilder) {
Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionablePropertiesEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionablePropertiesEditor.java?rev=1759392&r1=1759391&r2=1759392&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionablePropertiesEditor.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionablePropertiesEditor.java Tue Sep 6 09:38:29 2016
@@ -37,7 +37,6 @@ import static com.google.common.collect.
import static org.apache.jackrabbit.JcrConstants.JCR_BASEVERSION;
import static org.apache.jackrabbit.JcrConstants.JCR_FROZENMIXINTYPES;
import static org.apache.jackrabbit.JcrConstants.JCR_ISCHECKEDOUT;
-import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
import static org.apache.jackrabbit.JcrConstants.JCR_PREDECESSORS;
import static org.apache.jackrabbit.JcrConstants.JCR_ROOTVERSION;
import static org.apache.jackrabbit.JcrConstants.JCR_SUCCESSORS;
@@ -51,6 +50,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.api.Type.REFERENCES;
import static org.apache.jackrabbit.oak.plugins.memory.MultiGenericPropertyState.nameProperty;
import static org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil.getVersionHistoryNodeState;
+import static org.apache.jackrabbit.oak.upgrade.version.VersionHistoryUtil.getVersionStorage;
/**
* The VersionablePropertiesEditor adds missing versionable properties.
@@ -63,6 +63,8 @@ public final class VersionableProperties
private final NodeBuilder rootBuilder;
+ private final NodeBuilder versionStorage;
+
private final NodeBuilder builder;
private final TypePredicate isVersionable;
@@ -76,6 +78,7 @@ public final class VersionableProperties
private VersionablePropertiesEditor(NodeBuilder rootBuilder) {
this.builder = rootBuilder;
this.rootBuilder = rootBuilder;
+ this.versionStorage = getVersionStorage(rootBuilder);
this.isVersionable = new TypePredicate(rootBuilder.getNodeState(), MIX_VERSIONABLE);
this.isSimpleVersionable = new TypePredicate(rootBuilder.getNodeState(), MIX_SIMPLE_VERSIONABLE);
this.isNtVersion = new TypePredicate(rootBuilder.getNodeState(), NT_VERSION);
@@ -85,6 +88,7 @@ public final class VersionableProperties
private VersionablePropertiesEditor(VersionablePropertiesEditor parent, NodeBuilder builder) {
this.builder = builder;
this.rootBuilder = parent.rootBuilder;
+ this.versionStorage = parent.versionStorage;
this.isVersionable = parent.isVersionable;
this.isSimpleVersionable = parent.isSimpleVersionable;
this.isNtVersion = parent.isNtVersion;
@@ -133,7 +137,7 @@ public final class VersionableProperties
}
private void fixProperties(NodeBuilder node) {
- NodeState versionHistory = getVersionHistoryNodeState(rootBuilder.getNodeState(), node.getString(JCR_UUID));
+ NodeState versionHistory = getVersionHistoryNodeState(versionStorage.getNodeState(), node.getString(JCR_UUID));
if (!versionHistory.exists()) {
log.warn("No version history for {}", node);
return;