You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2011/10/20 15:46:42 UTC
svn commit: r1186802 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core:
RepositoryChecker.java version/InternalVersionManagerBase.java
Author: reschke
Date: Thu Oct 20 13:46:42 2011
New Revision: 1186802
URL: http://svn.apache.org/viewvc?rev=1186802&view=rev
Log:
JCR-3115: Versioning fixup leaves persistence in a state where the node can't be made versionable again
Extend checker so that it gets the same VersionHistoryInfo object that other code gets when versioning gets enabled again.
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java?rev=1186802&r1=1186801&r2=1186802&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java Thu Oct 20 13:46:42 2011
@@ -41,6 +41,7 @@ import org.apache.jackrabbit.core.versio
import org.apache.jackrabbit.core.version.InternalVersion;
import org.apache.jackrabbit.core.version.InternalVersionHistory;
import org.apache.jackrabbit.core.version.InternalVersionManagerImpl;
+import org.apache.jackrabbit.core.version.VersionHistoryInfo;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NameFactory;
import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
@@ -129,14 +130,23 @@ class RepositoryChecker {
try {
log.debug("Checking version history of node {}", nid);
- message = "Removing references to a missing version history of node " + nid;
+ String intro = "Removing references to an inconsistent version history of node "
+ + nid;
+
+ message = intro + " (getting the VersionInfo)";
+ VersionHistoryInfo vhi = versionManager.getVersionHistoryInfoForNode(node);
+ if (vhi != null) {
+ // get the version history's node ID as early as possible
+ // so we can attempt a fixup even when the next call fails
+ vhid = vhi.getVersionHistoryId();
+ }
+
+ message = intro + " (getting the InternalVersionHistory)";
InternalVersionHistory vh = versionManager.getVersionHistoryOfNode(nid);
vhid = vh.getId();
// additional checks, see JCR-3101
- String intro = "Removing references to an inconsistent version history of node "
- + nid;
message = intro + " (getting the version names failed)";
Name[] versionNames = vh.getVersionNames();
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java?rev=1186802&r1=1186801&r2=1186802&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java Thu Oct 20 13:46:42 2011
@@ -305,11 +305,14 @@ abstract class InternalVersionManagerBas
}
/**
- * {@inheritDoc}
+ * Returns information about the version history of the specified node
+ * or <code>null</code> when unavailable.
+ *
+ * @param vNode node whose version history should be returned
+ * @return identifiers of the version history and root version nodes
+ * @throws RepositoryException if an error occurs
*/
- public VersionHistoryInfo getVersionHistory(Session session, NodeState node,
- NodeId copiedFrom)
- throws RepositoryException {
+ public VersionHistoryInfo getVersionHistoryInfoForNode(NodeState node) throws RepositoryException {
VersionHistoryInfo info = null;
VersioningLock.ReadLock lock = acquireReadLock();
@@ -335,6 +338,17 @@ abstract class InternalVersionManagerBas
lock.release();
}
+ return info;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public VersionHistoryInfo getVersionHistory(Session session, NodeState node,
+ NodeId copiedFrom)
+ throws RepositoryException {
+ VersionHistoryInfo info = getVersionHistoryInfoForNode(node);
+
if (info == null) {
info = createVersionHistory(session, node, copiedFrom);
}