Author: tomekr Date: Wed Aug 3 08:51:53 2016 New Revision: 1755050 URL: http://svn.apache.org/viewvc?rev=1755050&view=rev Log: OAK-4630: Create segment and segment tar directory only when it's missing
Original patch provided by arkad...@adobe.com. Added: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarWithMissingDestinationDirectoryTest.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentFactory.java jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentTarFactory.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/UpgradeOldSegmentTest.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentTarNodeStoreContainer.java Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentFactory.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentFactory.java?rev=1755050&r1=1755049&r2=1755050&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentFactory.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentFactory.java Wed Aug 3 08:51:53 2016 @@ -43,11 +43,18 @@ public class SegmentFactory implements N public SegmentFactory(String directory, boolean mmap) { this.dir = new File(directory); this.mmap = mmap; + createDirectoryIfMissing(dir); if (!dir.isDirectory()) { throw new IllegalArgumentException("Not a directory: " + dir.getPath()); } } + private void createDirectoryIfMissing(File directory) { + if (!directory.exists()) { + directory.mkdirs(); + } + } + @Override public NodeStore create(BlobStore blobStore, Closer closer) throws IOException { Builder builder = FileStore.builder(new File(dir, "segmentstore")); Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentTarFactory.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentTarFactory.java?rev=1755050&r1=1755049&r2=1755050&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentTarFactory.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentTarFactory.java Wed Aug 3 08:51:53 2016 @@ -43,11 +43,18 @@ public class SegmentTarFactory implement public SegmentTarFactory(String directory, boolean mmap) { this.dir = new File(directory); this.mmap = mmap; + createDirectoryIfMissing(dir); if (!dir.isDirectory()) { throw new IllegalArgumentException("Not a directory: " + dir.getPath()); } } + private void createDirectoryIfMissing(File directory) { + if (!directory.exists()) { + directory.mkdirs(); + } + } + @Override public NodeStore create(BlobStore blobStore, Closer closer) throws IOException { final FileStoreBuilder builder = fileStoreBuilder(new File(dir, "segmentstore")); Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/UpgradeOldSegmentTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/UpgradeOldSegmentTest.java?rev=1755050&r1=1755049&r2=1755050&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/UpgradeOldSegmentTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/UpgradeOldSegmentTest.java Wed Aug 3 08:51:53 2016 @@ -56,7 +56,6 @@ public class UpgradeOldSegmentTest { File oldRepo = new File(testFolder, "test-repo-1.0"); File newRepo = new File(testFolder, "test-repo-new"); oldRepo.mkdirs(); - newRepo.mkdirs(); try (InputStream in = UpgradeOldSegmentTest.class.getResourceAsStream("/test-repo-1.0.zip")) { Util.unzip(in, oldRepo); } Added: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarWithMissingDestinationDirectoryTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarWithMissingDestinationDirectoryTest.java?rev=1755050&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarWithMissingDestinationDirectoryTest.java (added) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarWithMissingDestinationDirectoryTest.java Wed Aug 3 08:51:53 2016 @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.oak.upgrade.cli; + +import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; +import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer; + +public class SegmentToSegmentTarWithMissingDestinationDirectoryTest extends AbstractOak2OakTest { + + private final NodeStoreContainer source; + + private final NodeStoreContainer destination; + + public SegmentToSegmentTarWithMissingDestinationDirectoryTest() { + source = new SegmentNodeStoreContainer(); + destination = getSegmentTarNodeStoreContainerWithMissingDirectory(); + } + + private SegmentTarNodeStoreContainer getSegmentTarNodeStoreContainerWithMissingDirectory() { + SegmentTarNodeStoreContainer segmentTarNodeStoreContainer = new SegmentTarNodeStoreContainer(); + segmentTarNodeStoreContainer.getDirectory().delete(); + return segmentTarNodeStoreContainer; + } + + @Override + protected NodeStoreContainer getSourceContainer() { + return source; + } + + @Override + protected NodeStoreContainer getDestinationContainer() { + return destination; + } + + @Override + protected String[] getArgs() { + return new String[] { source.getDescription(), destination.getDescription() }; + } + + @Override + protected boolean supportsCheckpointMigration() { + return true; + } +} Added: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java?rev=1755050&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java (added) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java Wed Aug 3 08:51:53 2016 @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.oak.upgrade.cli; + +import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; +import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; + +public class SegmentToSegmentWithMissingDestinationDirectoryTest extends AbstractOak2OakTest { + private final NodeStoreContainer source; + + private final NodeStoreContainer destination; + + public SegmentToSegmentWithMissingDestinationDirectoryTest() { + source = new SegmentNodeStoreContainer(); + destination = getSegmentNodeStoreContainerWithMissingDirectory(); + } + + private SegmentNodeStoreContainer getSegmentNodeStoreContainerWithMissingDirectory() { + SegmentNodeStoreContainer segmentNodeStoreContainer = new SegmentNodeStoreContainer(); + segmentNodeStoreContainer.getDirectory().delete(); + return segmentNodeStoreContainer; + } + + @Override + protected NodeStoreContainer getSourceContainer() { + return source; + } + + @Override + protected NodeStoreContainer getDestinationContainer() { + return destination; + } + + @Override + protected String[] getArgs() { + return new String[] { source.getDescription(), destination.getDescription() }; + } + + @Override + protected boolean supportsCheckpointMigration() { + return true; + } + +} Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java?rev=1755050&r1=1755049&r2=1755050&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java Wed Aug 3 08:51:53 2016 @@ -78,4 +78,8 @@ public class SegmentNodeStoreContainer i return SEGMENT_OLD_PREFIX + directory.getPath(); } + public File getDirectory() { + return directory; + } + } Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentTarNodeStoreContainer.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentTarNodeStoreContainer.java?rev=1755050&r1=1755049&r2=1755050&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentTarNodeStoreContainer.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentTarNodeStoreContainer.java Wed Aug 3 08:51:53 2016 @@ -78,4 +78,8 @@ public class SegmentTarNodeStoreContaine return directory.getPath(); } + public File getDirectory() { + return directory; + } + }