Author: tomekr
Date: Wed Jun 20 10:42:09 2018
New Revision: 1833904

URL: http://svn.apache.org/viewvc?rev=1833904&view=rev
Log:
OAK-7561: Don't migrate the checkpoints in oak-store-composite seed 
initialization

Modified:
    
jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/InitialContentMigrator.java
    
jackrabbit/oak/trunk/oak-store-composite/src/test/java/org/apache/jackrabbit/oak/composite/InitialContentMigratorTest.java

Modified: 
jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/InitialContentMigrator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/InitialContentMigrator.java?rev=1833904&r1=1833903&r2=1833904&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/InitialContentMigrator.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/InitialContentMigrator.java
 Wed Jun 20 10:42:09 2018
@@ -17,10 +17,8 @@
 package org.apache.jackrabbit.oak.composite;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
 import org.apache.jackrabbit.oak.plugins.migration.FilteringNodeState;
 import org.apache.jackrabbit.oak.plugins.migration.report.LoggingReporter;
 import org.apache.jackrabbit.oak.plugins.migration.report.ReportingNodeState;
@@ -37,10 +35,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.util.Collections;
 import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 public class InitialContentMigrator {
@@ -125,60 +121,20 @@ public class InitialContentMigrator {
         LOG.info("Exclude: {}", excludePaths);
         LOG.info("Exclude fragments: {} @ {}", excludeFragments, 
fragmentPaths);
 
-        Map<String, String> nameToRevision = new LinkedHashMap<>();
-        Map<String, String> checkpointSegmentToDoc = new LinkedHashMap<>();
-
-        NodeState initialRoot = targetNodeStore.getRoot();
-        NodeState targetRoot = initialRoot;
-        NodeState previousRoot = initialRoot;
-        for (String checkpointName : seedNodeStore.checkpoints()) {
-            NodeState checkpointRoot = seedNodeStore.retrieve(checkpointName);
-            Map<String, String> checkpointInfo = 
seedNodeStore.checkpointInfo(checkpointName);
-
-            if (previousRoot == initialRoot) {
-                LOG.info("Migrating first checkpoint: {}", checkpointName);
-            } else {
-                LOG.info("Applying diff to {}", checkpointName);
-            }
-            LOG.info("Checkpoint metadata: {}", checkpointInfo);
-
-            targetRoot = copyDiffToTarget(previousRoot, checkpointRoot, 
targetRoot);
-            previousRoot = checkpointRoot;
-
-            String newCheckpointName = 
targetNodeStore.checkpoint(Long.MAX_VALUE, checkpointInfo);
-            if (checkpointInfo.containsKey("name")) {
-                nameToRevision.put(checkpointInfo.get("name"), 
newCheckpointName);
-            }
-            checkpointSegmentToDoc.put(checkpointName, newCheckpointName);
-        }
-
-        NodeState sourceRoot = seedNodeStore.getRoot();
-        if (previousRoot == initialRoot) {
-            LOG.info("No checkpoints found; migrating head");
-        } else {
-            LOG.info("Applying diff to head");
-        }
+        NodeState targetRoot = targetNodeStore.getRoot();
+        NodeBuilder targetBuilder = targetRoot.builder();
+        NodeState seedRoot = wrapNodeState(seedNodeStore.getRoot(), true);
+        seedRoot.compareAgainstBaseState(EmptyNodeState.EMPTY_NODE, new 
ApplyDiff(targetBuilder));
+        targetNodeStore.merge(targetBuilder, EmptyHook.INSTANCE, 
CommitInfo.EMPTY);
 
-        targetRoot = copyDiffToTarget(previousRoot, sourceRoot, targetRoot);
+        String fullTextAsyncId = targetNodeStore.checkpoint(Long.MAX_VALUE, 
Collections.singletonMap("name", "fulltext-async"));
+        String asyncId = targetNodeStore.checkpoint(Long.MAX_VALUE, 
Collections.singletonMap("name", "async"));
 
-        LOG.info("Rewriting checkpoint names in /:async {}", nameToRevision);
-        NodeBuilder targetBuilder = targetRoot.builder();
-        NodeBuilder async = targetBuilder.getChildNode(":async");
-        for (Map.Entry<String, String> e : nameToRevision.entrySet()) {
-            async.setProperty(e.getKey(), e.getValue(), Type.STRING);
-
-            PropertyState temp = async.getProperty(e.getKey() + "-temp");
-            if (temp == null) {
-                continue;
-            }
-            List<String> tempValues = 
Lists.newArrayList(temp.getValue(Type.STRINGS));
-            for (Map.Entry<String, String> sToD : 
checkpointSegmentToDoc.entrySet()) {
-                if (tempValues.contains(sToD.getKey())) {
-                    tempValues.set(tempValues.indexOf(sToD.getKey()), 
sToD.getValue());
-                }
-            }
-            async.setProperty(e.getKey() + "-temp", tempValues, Type.STRINGS);
-        }
+        targetBuilder = targetRoot.builder();
+        targetBuilder.getChildNode(":async").remove();
+        NodeBuilder asyncNode = targetBuilder.child(":async");
+        asyncNode.setProperty("fulltext-async", fullTextAsyncId);
+        asyncNode.setProperty("async", asyncId);
 
         targetNodeStore.merge(targetBuilder, EmptyHook.INSTANCE, 
CommitInfo.EMPTY);
 
@@ -192,15 +148,6 @@ public class InitialContentMigrator {
         targetNodeStore.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
-    private NodeState copyDiffToTarget(NodeState before, NodeState after, 
NodeState targetRoot) throws CommitFailedException {
-        NodeBuilder targetBuilder = targetRoot.builder();
-        NodeState currentRoot = wrapNodeState(after, true);
-        NodeState baseRoot = wrapNodeState(before, false);
-        currentRoot.compareAgainstBaseState(baseRoot, new 
ApplyDiff(targetBuilder));
-        return targetNodeStore.merge(targetBuilder, EmptyHook.INSTANCE, 
CommitInfo.EMPTY);
-    }
-
-
     private NodeState wrapNodeState(NodeState nodeState, boolean logPaths) {
         NodeState wrapped = nodeState;
         wrapped = FilteringNodeState.wrap("/", wrapped, includePaths, 
excludePaths, fragmentPaths, excludeFragments);

Modified: 
jackrabbit/oak/trunk/oak-store-composite/src/test/java/org/apache/jackrabbit/oak/composite/InitialContentMigratorTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-composite/src/test/java/org/apache/jackrabbit/oak/composite/InitialContentMigratorTest.java?rev=1833904&r1=1833903&r2=1833904&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-composite/src/test/java/org/apache/jackrabbit/oak/composite/InitialContentMigratorTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-composite/src/test/java/org/apache/jackrabbit/oak/composite/InitialContentMigratorTest.java
 Wed Jun 20 10:42:09 2018
@@ -16,7 +16,9 @@
  */
 package org.apache.jackrabbit.oak.composite;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -24,8 +26,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
@@ -48,27 +48,20 @@ import org.junit.Test;
 public class InitialContentMigratorTest {
 
     @Test
-    public void migrateContentWithCheckpoints() throws IOException, 
CommitFailedException {
-
+    public void migrateContent() throws IOException, CommitFailedException {
         // 1. populate the seed store with
         // .
         // \- first
         // \- second
         // \- third
         //
-        // 2. checkpoint before adding the third node
-        //
-        // 3. the mount only includes the '/first' path, so only the
+        // 2. the mount only includes the '/first' path, so only the
         // 'second' and 'third' nodes should be available
 
         MemoryNodeStore seed = new MemoryNodeStore();
         NodeBuilder root = seed.getRoot().builder();
         root.child("first");
         root.child("second");
-        seed.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
-        String checkpoint1 = seed.checkpoint(TimeUnit.MINUTES.toMillis(10));
-        
-        root = seed.getRoot().builder();
         root.child("third");
         seed.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         
@@ -85,13 +78,15 @@ public class InitialContentMigratorTest
         assertFalse("Node /first should not have been migrated", 
targetRoot.hasChildNode("first"));
         assertTrue("Node /second should have been migrated", 
targetRoot.hasChildNode("second"));
         assertTrue("Node /third should have been migrated", 
targetRoot.hasChildNode("third"));
-        
-        // verify that the 'second' node is visible in the migrated store when 
retrieving the checkpoint
-        NodeState checkpointTargetRoot = target.retrieve(checkpoint1);
-        assertFalse("Node /first should not have been migrated", 
checkpointTargetRoot.hasChildNode("first"));
-        assertTrue("Node /second should have been migrated", 
checkpointTargetRoot.hasChildNode("second"));
-        assertFalse("Node /third should not be visible from the migrated 
checkpoint", checkpointTargetRoot.hasChildNode("third"));
 
+        // verify that the async and fulltext-async checkpoints are available
+        NodeState mountAsync = target.getRoot().getChildNode(":async");
+        assertNotNull(target.retrieve(mountAsync.getString("async")));
+        assertNotNull(target.retrieve(mountAsync.getString("fulltext-async")));
+
+        // verify the info objects for the checkpoints
+        assertEquals("async", 
target.checkpointInfo(mountAsync.getString("async")).get("name"));
+        assertEquals("fulltext-async", 
target.checkpointInfo(mountAsync.getString("fulltext-async")).get("name"));
     }
 
     @Test


Reply via email to