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 2019/02/21 11:43:21 UTC

svn commit: r1854040 - in /jackrabbit/oak/branches/1.10/oak-upgrade/src: main/java/org/apache/jackrabbit/oak/upgrade/ main/java/org/apache/jackrabbit/oak/upgrade/version/ test/java/org/apache/jackrabbit/oak/upgrade/

Author: tomekr
Date: Thu Feb 21 11:43:21 2019
New Revision: 1854040

URL: http://svn.apache.org/viewvc?rev=1854040&view=rev
Log:
OAK-8070: The date-based copy-versions directive doesn't work correctly with include-paths

Modified:
    jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
    jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
    jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java
    jackrabbit/oak/branches/1.10/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java

Modified: jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java?rev=1854040&r1=1854039&r2=1854040&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java (original)
+++ jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java Thu Feb 21 11:43:21 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/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java?rev=1854040&r1=1854039&r2=1854040&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java (original)
+++ jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java Thu Feb 21 11:43:21 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/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java?rev=1854040&r1=1854039&r2=1854040&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java (original)
+++ jackrabbit/oak/branches/1.10/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/version/VersionHistoryUtil.java Thu Feb 21 11:43:21 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/branches/1.10/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java?rev=1854040&r1=1854039&r2=1854040&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.10/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java (original)
+++ jackrabbit/oak/branches/1.10/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/CopyVersionHistoryTest.java Thu Feb 21 11:43:21 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);