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 2014/05/08 15:56:59 UTC
svn commit: r1593283 - in /jackrabbit/oak/branches/1.0: ./
oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/
oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/
Author: jukka
Date: Thu May 8 13:56:59 2014
New Revision: 1593283
URL: http://svn.apache.org/r1593283
Log:
1.0: Merged revisions 1593061 and 1593061 (OAK-1801)
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1593061
Modified: jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java?rev=1593283&r1=1593282&r2=1593283&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java (original)
+++ jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java Thu May 8 13:56:59 2014
@@ -31,10 +31,13 @@ import static org.apache.jackrabbit.JcrC
import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
import static org.apache.jackrabbit.JcrConstants.JCR_UUID;
+import static org.apache.jackrabbit.JcrConstants.JCR_VERSIONHISTORY;
import static org.apache.jackrabbit.JcrConstants.MIX_REFERENCEABLE;
+import static org.apache.jackrabbit.JcrConstants.MIX_VERSIONABLE;
import static org.apache.jackrabbit.JcrConstants.NT_BASE;
import static org.apache.jackrabbit.JcrConstants.NT_FROZENNODE;
import static org.apache.jackrabbit.JcrConstants.NT_UNSTRUCTURED;
+import static org.apache.jackrabbit.JcrConstants.NT_VERSIONHISTORY;
import static org.apache.jackrabbit.oak.api.Type.NAME;
import static org.apache.jackrabbit.oak.api.Type.NAMES;
import static org.apache.jackrabbit.oak.api.Type.STRING;
@@ -103,10 +106,16 @@ class JackrabbitNodeState extends Abstra
*/
private final BundleLoader loader;
+ private final String workspaceName;
+
private final TypePredicate isReferenceable;
private final TypePredicate isOrderable;
+ private final TypePredicate isVersionable;
+
+ private final TypePredicate isVersionHistory;
+
private final TypePredicate isFrozenNode;
/**
@@ -114,42 +123,55 @@ class JackrabbitNodeState extends Abstra
*/
private final Map<String, String> uriToPrefix;
+ private final Map<String, String> versionablePaths;
+
+ private final boolean useBinaryReferences;
+
private final Map<String, NodeId> nodes;
private final Map<String, PropertyState> properties;
- private final boolean useBinaryReferences;
-
private JackrabbitNodeState(
JackrabbitNodeState parent, String name, NodePropBundle bundle) {
this.parent = parent;
this.name = name;
this.path = null;
this.loader = parent.loader;
+ this.workspaceName = parent.workspaceName;
this.isReferenceable = parent.isReferenceable;
this.isOrderable = parent.isOrderable;
+ this.isVersionable = parent.isVersionable;
+ this.isVersionHistory = parent.isVersionHistory;
this.isFrozenNode = parent.isFrozenNode;
this.uriToPrefix = parent.uriToPrefix;
+ this.versionablePaths = parent.versionablePaths;
+ this.useBinaryReferences = parent.useBinaryReferences;
this.properties = createProperties(bundle);
this.nodes = createNodes(bundle);
setChildOrder();
+ setVersionablePaths();
fixFrozenUuid();
- this.useBinaryReferences = parent.useBinaryReferences;
logNewNode(this);
}
JackrabbitNodeState(
PersistenceManager source, NodeState root,
Map<String, String> uriToPrefix, NodeId id, String path,
+ String workspaceName, Map<String, String> versionablePaths,
boolean useBinaryReferences) {
this.parent = null;
this.name = null;
this.path = path;
this.loader = new BundleLoader(source);
+ this.workspaceName = workspaceName;
this.isReferenceable = new TypePredicate(root, MIX_REFERENCEABLE);
this.isOrderable = TypePredicate.isOrderable(root);
+ this.isVersionable = new TypePredicate(root, MIX_VERSIONABLE);
+ this.isVersionHistory = new TypePredicate(root, NT_VERSIONHISTORY);
this.isFrozenNode = new TypePredicate(root, NT_FROZENNODE);
this.uriToPrefix = uriToPrefix;
+ this.versionablePaths = versionablePaths;
+ this.useBinaryReferences = useBinaryReferences;
try {
NodePropBundle bundle = loader.loadBundle(id);
this.properties = createProperties(bundle);
@@ -158,7 +180,6 @@ class JackrabbitNodeState extends Abstra
} catch (ItemStateException e) {
throw new IllegalStateException("Unable to access node " + id, e);
}
- this.useBinaryReferences = useBinaryReferences;
logNewNode(this);
}
@@ -255,6 +276,21 @@ class JackrabbitNodeState extends Abstra
}
}
+ private void setVersionablePaths() {
+ if (isVersionable.apply(this)) {
+ String uuid = getString(JCR_VERSIONHISTORY);
+ if (uuid != null) {
+ versionablePaths.put(uuid, getPath());
+ }
+ } else if (isVersionHistory.apply(this)) {
+ String uuid = getString(JCR_UUID);
+ String path = versionablePaths.get(uuid);
+ if (path != null) {
+ properties.put(workspaceName, PropertyStates.createProperty(workspaceName, path, Type.PATH));
+ }
+ }
+ }
+
private Map<String, NodeId> createNodes(NodePropBundle bundle) {
Map<String, NodeId> children = newLinkedHashMap();
for (ChildNodeEntry entry : bundle.getChildNodeEntries()) {
Modified: jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java?rev=1593283&r1=1593282&r2=1593283&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java (original)
+++ jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java Thu May 8 13:56:59 2014
@@ -246,7 +246,7 @@ public class RepositoryUpgrade {
NodeState base = target.getRoot();
NodeBuilder builder = base.builder();
- String workspace =
+ String workspaceName =
source.getRepositoryConfig().getDefaultWorkspaceName();
SecurityProviderImpl security = new SecurityProviderImpl(
mapSecurityConfig(config.getSecurityConfig()));
@@ -257,7 +257,7 @@ public class RepositoryUpgrade {
initializer.initialize(builder);
}
for (SecurityConfiguration sc : security.getConfigurations()) {
- sc.getWorkspaceInitializer().initialize(builder, workspace);
+ sc.getWorkspaceInitializer().initialize(builder, workspaceName);
}
HashBiMap<String, String> uriToPrefix = HashBiMap.create();
@@ -271,9 +271,10 @@ public class RepositoryUpgrade {
new TypeEditorProvider(false).getRootEditor(
base, builder.getNodeState(), builder, null);
+ Map<String, String> versionablePaths = newHashMap();
NodeState root = builder.getNodeState();
- copyVersionStore(builder, root, uriToPrefix, idxToPrefix);
- copyWorkspace(builder, root, workspace, uriToPrefix, idxToPrefix);
+ copyWorkspace(builder, root, workspaceName, uriToPrefix, idxToPrefix, versionablePaths);
+ copyVersionStore(builder, root, workspaceName, uriToPrefix, idxToPrefix, versionablePaths);
logger.info("Applying default commit hooks");
// TODO: default hooks?
@@ -292,7 +293,7 @@ public class RepositoryUpgrade {
// security-related hooks
for (SecurityConfiguration sc : security.getConfigurations()) {
- hooks.addAll(sc.getCommitHooks(workspace));
+ hooks.addAll(sc.getCommitHooks(workspaceName));
}
// type validation, reference and indexing hooks
@@ -765,34 +766,40 @@ public class RepositoryUpgrade {
}
private void copyVersionStore(
- NodeBuilder builder, NodeState root,
- Map<String, String> uriToPrefix, Map<Integer, String> idxToPrefix)
+ NodeBuilder builder, NodeState root, String workspaceName,
+ Map<String, String> uriToPrefix, Map<Integer, String> idxToPrefix,
+ Map<String, String> versionablePaths)
throws RepositoryException, IOException {
- logger.info("Copying version histories");
-
PersistenceManager pm =
source.getInternalVersionManager().getPersistenceManager();
-
NodeBuilder system = builder.child(JCR_SYSTEM);
+
+ logger.info("Copying version histories");
copyState(system, JCR_VERSIONSTORAGE, new JackrabbitNodeState(
pm, root, uriToPrefix, VERSION_STORAGE_NODE_ID,
- "/jcr:system/jcr:versionStorage", copyBinariesByReference));
+ "/jcr:system/jcr:versionStorage",
+ workspaceName, versionablePaths, copyBinariesByReference));
+
+ logger.info("Copying activities");
copyState(system, "jcr:activities", new JackrabbitNodeState(
pm, root, uriToPrefix, ACTIVITIES_NODE_ID,
- "/jcr:system/jcr:activities", copyBinariesByReference));
+ "/jcr:system/jcr:activities",
+ workspaceName, versionablePaths, copyBinariesByReference));
}
private String copyWorkspace(
- NodeBuilder builder, NodeState root, String name,
- Map<String, String> uriToPrefix, Map<Integer, String> idxToPrefix)
+ NodeBuilder builder, NodeState root, String workspaceName,
+ Map<String, String> uriToPrefix, Map<Integer, String> idxToPrefix,
+ Map<String, String> versionablePaths)
throws RepositoryException, IOException {
- logger.info("Copying workspace {}", name);
+ logger.info("Copying workspace {}", workspaceName);
PersistenceManager pm =
- source.getWorkspaceInfo(name).getPersistenceManager();
+ source.getWorkspaceInfo(workspaceName).getPersistenceManager();
NodeState state = new JackrabbitNodeState(
- pm, root, uriToPrefix, ROOT_NODE_ID, "/", copyBinariesByReference);
+ pm, root, uriToPrefix, ROOT_NODE_ID, "/",
+ workspaceName, versionablePaths, copyBinariesByReference);
for (PropertyState property : state.getProperties()) {
builder.setProperty(property);
@@ -800,11 +807,12 @@ public class RepositoryUpgrade {
for (ChildNodeEntry child : state.getChildNodeEntries()) {
String childName = child.getName();
if (!JCR_SYSTEM.equals(childName)) {
+ logger.info("Copying subtree /{}", childName);
copyState(builder, childName, child.getNodeState());
}
}
- return name;
+ return workspaceName;
}
private void copyState(NodeBuilder parent, String name, NodeState state) {
Modified: jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java?rev=1593283&r1=1593282&r2=1593283&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java (original)
+++ jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java Thu May 8 13:56:59 2014
@@ -38,6 +38,7 @@ import java.util.Random;
import javax.jcr.Binary;
import javax.jcr.NamespaceRegistry;
import javax.jcr.Node;
+import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.PropertyType;
import javax.jcr.Repository;
@@ -51,6 +52,7 @@ import javax.jcr.nodetype.PropertyDefini
import javax.jcr.nodetype.PropertyDefinitionTemplate;
import javax.jcr.security.Privilege;
import javax.jcr.version.Version;
+import javax.jcr.version.VersionHistory;
import javax.jcr.version.VersionManager;
import org.apache.jackrabbit.api.JackrabbitSession;
@@ -430,6 +432,10 @@ public class RepositoryUpgradeTest exten
"OAK-1789",
child2.getIdentifier(),
frozenChild2.getProperty(JCR_FROZENUUID).getString());
+
+ VersionHistory history = manager.getVersionHistory("/versionable");
+ Property versionablePath = history.getProperty("default");
+ assertEquals("/versionable", versionablePath.getString());
} finally {
session.logout();
}