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 js...@apache.org on 2016/01/11 22:07:33 UTC
svn commit: r1724130 -
/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionCopier.java
Author: jsedding
Date: Mon Jan 11 21:07:33 2016
New Revision: 1724130
URL: http://svn.apache.org/viewvc?rev=1724130&view=rev
Log:
OAK-3849 - After partial migration versions are not restorable
- Applied patch from Tomek Rękawek, thanks!
Modified:
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionCopier.java
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=1724130&r1=1724129&r2=1724130&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 Mon Jan 11 21:07:33 2016
@@ -24,7 +24,9 @@ import static org.apache.jackrabbit.JcrC
import java.util.Calendar;
import java.util.Iterator;
+import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.index.IndexUtils;
import org.apache.jackrabbit.oak.plugins.nodetype.TypePredicate;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -33,6 +35,7 @@ import org.apache.jackrabbit.oak.upgrade
import org.apache.jackrabbit.oak.upgrade.nodestate.NodeStateCopier;
import org.apache.jackrabbit.util.ISO8601;
+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;
@@ -61,17 +64,22 @@ public class VersionCopier {
final Iterator<NodeState> versionStorageIterator = new DescendantsIterator(versionStorage, 3);
final VersionCopier versionCopier = new VersionCopier(sourceRoot, targetRoot);
+ boolean versionsCopied = false;
while (versionStorageIterator.hasNext()) {
final NodeState versionHistoryBucket = versionStorageIterator.next();
for (String versionHistory : versionHistoryBucket.getChildNodeNames()) {
- versionCopier.copyVersionHistory(versionHistory, config.getOrphanedMinDate());
+ versionsCopied |= versionCopier.doCopyVersionHistory(versionHistory, config.getOrphanedMinDate());
}
}
+
+ if (versionsCopied) {
+ versionCopier.markUuidToReindex();
+ }
}
/**
- * Copy history filtering versions using passed date and returns @{code
- * true} if at least one version has been copied.
+ * Copy history filtering versions using passed date and returns {@code
+ * true} if the history has been copied.
*
* @param versionableUuid
* Name of the version history node
@@ -80,6 +88,14 @@ public class VersionCopier {
* @return {@code true} if at least one version has been copied
*/
public boolean copyVersionHistory(String versionableUuid, Calendar minDate) {
+ boolean copied = doCopyVersionHistory(versionableUuid, minDate);
+ if (copied) {
+ markUuidToReindex();
+ }
+ return copied;
+ }
+
+ private boolean doCopyVersionHistory(String versionableUuid, Calendar minDate) {
final String versionHistoryPath = getVersionHistoryPath(versionableUuid);
final NodeState versionHistory = getVersionHistoryNodeState(sourceRoot, versionableUuid);
final Calendar lastModified = getVersionHistoryLastModified(versionHistory);
@@ -111,4 +127,12 @@ public class VersionCopier {
}
return youngest;
}
+
+ private void markUuidToReindex() {
+ final NodeBuilder uuidIndexDefinition = IndexUtils.getOrCreateOakIndex(targetRoot).getChildNode("uuid");
+ final PropertyState reindex = uuidIndexDefinition.getProperty(REINDEX_PROPERTY_NAME);
+ if (reindex == null || !reindex.getValue(Type.BOOLEAN)) {
+ uuidIndexDefinition.setProperty(REINDEX_PROPERTY_NAME, true);
+ }
+ }
}