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 2017/03/12 17:23:06 UTC
svn commit: r1786602 - in /jackrabbit/oak/trunk/oak-upgrade/src:
main/java/org/apache/jackrabbit/oak/upgrade/
test/java/org/apache/jackrabbit/oak/upgrade/cli/
test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/
Author: tomekr
Date: Sun Mar 12 17:23:06 2017
New Revision: 1786602
URL: http://svn.apache.org/viewvc?rev=1786602&view=rev
Log:
OAK-5920 Checkpoint migration will fail if the MissingBlobStore is used
Modified:
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.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=1786602&r1=1786601&r2=1786602&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 Sun Mar 12 17:23:06 2017
@@ -305,7 +305,14 @@ public class RepositorySidegrade {
LOG.info("Custom paths have been specified, checkpoints won't be migrated");
isRemoveCheckpointReferences = true;
} else {
- boolean checkpointsCopied = copyCheckpoints(targetRoot);
+ boolean checkpointsCopied;
+ try {
+ checkpointsCopied = copyCheckpoints(targetRoot);
+ } catch(UnsupportedOperationException e) {
+ removeCheckpoints();
+ checkpointsCopied = false;
+ LOG.warn("Can't copy checkpoints without the access to the external blob store; migration will proceed");
+ }
if (!checkpointsCopied) {
LOG.info("Copying checkpoints is not supported for this combination of node stores");
isRemoveCheckpointReferences = true;
@@ -409,6 +416,16 @@ public class RepositorySidegrade {
return true;
}
+ private void removeCheckpoints() {
+ if (!(target instanceof TarNodeStore)) {
+ return;
+ }
+ TarNodeStore targetTarNS = (TarNodeStore) target;
+ NodeBuilder targetSuperRoot = ((TarNodeStore) target).getSuperRoot().builder();
+ targetSuperRoot.setChildNode("checkpoints");
+ targetTarNS.setSuperRoot(targetSuperRoot);
+ }
+
/**
* Return all checkpoint paths, sorted by their "created" property, descending.
*
Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java?rev=1786602&r1=1786601&r2=1786602&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java Sun Mar 12 17:23:06 2017
@@ -22,12 +22,14 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import java.util.Random;
import javax.annotation.Nullable;
import javax.jcr.Node;
@@ -41,7 +43,9 @@ import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.commons.IOUtils;
import org.apache.jackrabbit.oak.jcr.Jcr;
import org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl;
@@ -142,15 +146,24 @@ public abstract class AbstractOak2OakTes
}
NodeBuilder builder = target.getRoot().builder();
+ builder.setProperty("binary-prop", getRandomBlob(target));
builder.setProperty("checkpoint-state", "before");
target.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
checkpointReference = target.checkpoint(60000, singletonMap("key", "123"));
builder.setProperty("checkpoint-state", "after");
+ builder.setProperty("binary-prop", getRandomBlob(target));
builder.child(":async").setProperty("test", "123");
target.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
}
+ private Blob getRandomBlob(NodeStore target) throws IOException {
+ Random r = new Random();
+ byte[] buff = new byte[512 * 1024];
+ r.nextBytes(buff);
+ return target.createBlob(new ByteArrayInputStream(buff));
+ }
+
@Test
public void validateMigration() throws RepositoryException, IOException, CliArgumentException {
verifyContent(session);
Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java?rev=1786602&r1=1786601&r2=1786602&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java Sun Mar 12 17:23:06 2017
@@ -65,70 +65,88 @@ public class CopyBinariesTest extends Ab
new SegmentNodeStoreContainer(blob),
new SegmentNodeStoreContainer(blob),
asList(),
- DatastoreArguments.BlobMigrationCase.COPY_REFERENCES
+ DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
+ false
});
params.add(new Object[]{
"Copy references, no blobstores defined, segment-tar -> segment-tar",
new SegmentTarNodeStoreContainer(blob),
new SegmentTarNodeStoreContainer(blob),
asList(),
- DatastoreArguments.BlobMigrationCase.COPY_REFERENCES
+ DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
+ false
+ });
+ params.add(new Object[]{
+ "Copy references, no blobstores defined, segment -> segment-tar",
+ new SegmentNodeStoreContainer(blob),
+ new SegmentTarNodeStoreContainer(blob),
+ asList(),
+ DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
+ false
});
params.add(new Object[]{
"Copy references, no blobstores defined, document -> segment-tar",
new JdbcNodeStoreContainer(blob),
new SegmentNodeStoreContainer(blob),
asList("--src-user=sa", "--src-password=sa"),
- DatastoreArguments.BlobMigrationCase.COPY_REFERENCES
+ DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
+ false
});
params.add(new Object[]{
"Copy references, no blobstores defined, segment-tar -> document",
new SegmentTarNodeStoreContainer(blob),
new JdbcNodeStoreContainer(blob),
asList("--user=sa", "--password=sa"),
- DatastoreArguments.BlobMigrationCase.UNSUPPORTED
+ DatastoreArguments.BlobMigrationCase.UNSUPPORTED,
+ false
});
params.add(new Object[]{
"Missing source, external destination",
new SegmentTarNodeStoreContainer(blob),
new SegmentTarNodeStoreContainer(blob),
asList("--datastore=" + blob.getDescription()),
- DatastoreArguments.BlobMigrationCase.UNSUPPORTED
+ DatastoreArguments.BlobMigrationCase.UNSUPPORTED,
+ false
});
params.add(new Object[]{
"Copy embedded to embedded, no blobstores defined",
new SegmentTarNodeStoreContainer(),
new SegmentTarNodeStoreContainer(),
asList(),
- DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EMBEDDED
+ DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EMBEDDED,
+ true
});
params.add(new Object[]{
"Copy embedded to external, no blobstores defined",
new SegmentTarNodeStoreContainer(),
new SegmentTarNodeStoreContainer(blob),
asList("--datastore=" + blob.getDescription()),
- DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EXTERNAL
+ DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EXTERNAL,
+ true
});
params.add(new Object[]{
"Copy references, src blobstore defined",
new SegmentTarNodeStoreContainer(blob),
new SegmentTarNodeStoreContainer(blob),
asList("--src-datastore=" + blob.getDescription()),
- DatastoreArguments.BlobMigrationCase.COPY_REFERENCES
+ DatastoreArguments.BlobMigrationCase.COPY_REFERENCES,
+ true
});
params.add(new Object[]{
"Copy external to embedded, src blobstore defined",
new SegmentTarNodeStoreContainer(blob),
new SegmentTarNodeStoreContainer(),
asList("--copy-binaries", "--src-datastore=" + blob.getDescription()),
- DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EMBEDDED
+ DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EMBEDDED,
+ true
});
params.add(new Object[]{
"Copy external to external, src blobstore defined",
new SegmentTarNodeStoreContainer(blob),
new SegmentTarNodeStoreContainer(blob2),
asList("--copy-binaries", "--src-datastore=" + blob.getDescription(), "--datastore=" + blob2.getDescription()),
- DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EXTERNAL
+ DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EXTERNAL,
+ true
});
return params;
}
@@ -141,11 +159,14 @@ public class CopyBinariesTest extends Ab
private final DatastoreArguments.BlobMigrationCase blobMigrationCase;
- public CopyBinariesTest(String name, NodeStoreContainer source, NodeStoreContainer destination, List<String> args, DatastoreArguments.BlobMigrationCase blobMigrationCase) throws IOException, CliArgumentException {
+ private final boolean supportsCheckpointMigration;
+
+ public CopyBinariesTest(String name, NodeStoreContainer source, NodeStoreContainer destination, List<String> args, DatastoreArguments.BlobMigrationCase blobMigrationCase, boolean supportsCheckpointMigration) throws IOException, CliArgumentException {
this.source = source;
this.destination = destination;
this.args = args;
this.blobMigrationCase = blobMigrationCase;
+ this.supportsCheckpointMigration = supportsCheckpointMigration;
this.source.clean();
this.destination.clean();
@@ -203,7 +224,11 @@ public class CopyBinariesTest extends Ab
if (blobMigrationCase == DatastoreArguments.BlobMigrationCase.UNSUPPORTED) {
return;
}
- verifyContent(session);
- verifyBlob(session);
+ super.validateMigration();
+ }
+
+ @Override
+ protected boolean supportsCheckpointMigration() {
+ return supportsCheckpointMigration;
}
}
\ No newline at end of file