Author: tomekr Date: Thu Feb 21 11:09:38 2019 New Revision: 1854038 URL: http://svn.apache.org/viewvc?rev=1854038&view=rev Log: OAK-8070: The date-based copy-versions directive doesn't work correctly with include-paths
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/VersionHistoryUtil.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.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=1854038&r1=1854037&r2=1854038&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 Thu Feb 21 11:09:38 2019 @@ -437,7 +437,8 @@ public class RepositorySidegrade { private void removeVersions() throws CommitFailedException { NodeState root = target.getRoot(); NodeState wrappedRoot = FilteringNodeState.wrap(PathUtils.ROOT_PATH, root, includePaths, excludePaths, FilteringNodeState.NONE, FilteringNodeState.NONE); - List<String> versionablesToStrip = VersionHistoryUtil.getVersionableNodes(wrappedRoot, new TypePredicate(root, JcrConstants.MIX_VERSIONABLE), versionCopyConfiguration.getVersionsMinDate()); + NodeState versionStorage = getVersionStorage(root); + List<String> versionablesToStrip = VersionHistoryUtil.getVersionableNodes(wrappedRoot, versionStorage, new TypePredicate(root, JcrConstants.MIX_VERSIONABLE), versionCopyConfiguration.getVersionsMinDate()); if (!versionablesToStrip.isEmpty()) { LOG.info("Removing version histories for included paths"); NodeBuilder newRoot = VersionHistoryUtil.removeVersions(root, versionablesToStrip); 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=1854038&r1=1854037&r2=1854038&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 Thu Feb 21 11:09:38 2019 @@ -565,7 +565,8 @@ public class RepositoryUpgrade { private void removeVersions() throws CommitFailedException { NodeState root = target.getRoot(); NodeState wrappedRoot = FilteringNodeState.wrap(PathUtils.ROOT_PATH, root, includePaths, excludePaths, FilteringNodeState.NONE, FilteringNodeState.NONE); - List<String> versionablesToStrip = VersionHistoryUtil.getVersionableNodes(wrappedRoot, new TypePredicate(root, JcrConstants.MIX_VERSIONABLE), versionCopyConfiguration.getVersionsMinDate()); + NodeState versionStorage = getVersionStorage(root); + List<String> versionablesToStrip = VersionHistoryUtil.getVersionableNodes(wrappedRoot, versionStorage, new TypePredicate(root, JcrConstants.MIX_VERSIONABLE), versionCopyConfiguration.getVersionsMinDate()); if (!versionablesToStrip.isEmpty()) { logger.info("Removing version histories for included paths"); NodeBuilder newRoot = VersionHistoryUtil.removeVersions(root, versionablesToStrip); 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=1854038&r1=1854037&r2=1854038&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 Thu Feb 21 11:09:38 2019 @@ -111,9 +111,8 @@ public class VersionHistoryUtil { return vs; } - public static List<String> getVersionableNodes(NodeState root, TypePredicate isVersionable, Calendar olderThan) { + public static List<String> getVersionableNodes(NodeState root, NodeState versionStorage, TypePredicate isVersionable, Calendar olderThan) { List<String> paths = new ArrayList<>(); - NodeState versionStorage = getVersionStorage(root); getVersionableNodes(root, versionStorage, isVersionable, olderThan, PathUtils.ROOT_PATH, paths); return paths; } Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java?rev=1854038&r1=1854037&r2=1854038&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java Thu Feb 21 11:09:38 2019 @@ -228,6 +228,33 @@ public class CopyVersionHistoryTest exte } @Test + public void onlyReferencedAfterDateWithIncludePaths() throws RepositoryException, IOException { + final NodeStore targetNodeStore = SegmentNodeStoreBuilders.builder(new MemoryStore()).build(); + + // initialize the target node store, with no versions at all + migrate(config -> { + config.setCopyVersions(null); + config.setCopyOrphanedVersions(null); + }, targetNodeStore, "/"); + + // now only copy the recent versions + migrate(config -> { + config.setCopyVersions(betweenHistories); + config.setCopyOrphanedVersions(null); + }, targetNodeStore, "/versionables"); + + repository = (RepositoryImpl) new Jcr(new Oak(targetNodeStore)).createRepository(); + Session session = repository.login(AbstractRepositoryUpgradeTest.CREDENTIALS); + sessions.add(session); + + assertVersionableProperties(session, VERSIONABLES_YOUNG); + assertExistingHistories(session, VERSIONABLES_YOUNG); + assertVersionablePaths(session, VERSIONABLES_YOUNG); + assertMissingHistories(session, VERSIONABLES_OLD, VERSIONABLES_OLD_ORPHANED, VERSIONABLES_YOUNG_ORPHANED); + assertVersionsCanBeRestored(session, VERSIONABLES_YOUNG); + } + + @Test public void overrideOrphaned() throws RepositoryException, IOException { Session session = performCopy(new VersionCopySetup() { @Override @@ -335,6 +362,7 @@ public class CopyVersionHistoryTest exte for (final String name : names) { final String path = pathPrefix + name; Node versionable = session.getNode(path); + assertTrue(versionable.isNodeType(MIX_VERSIONABLE)); String versionHistoryUuid = versionable.getProperty(JCR_VERSIONHISTORY).getString(); assertEquals(getVersionHistoryForPath(session, path).getIdentifier(), versionHistoryUuid);