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