Author: tomekr Date: Wed Sep 21 08:25:14 2016 New Revision: 1761695 URL: http://svn.apache.org/viewvc?rev=1761695&view=rev Log: OAK-4831: Don't break the upgrade tests if the directory can't be cleaned-up
Modified: 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/Jcr2ToSegmentTest.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentTarToSegmentTest.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarTest.java 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/SegmentToSegmentTest.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFbsTest.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFdsTest.java jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FdsToFbsTest.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/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=1761695&r1=1761694&r2=1761695&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 Sep 21 08:25:14 2016 @@ -18,7 +18,6 @@ */ package org.apache.jackrabbit.oak.upgrade; -import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -41,10 +40,9 @@ import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.api.JackrabbitRepository; import org.apache.jackrabbit.commons.cnd.CndImporter; import org.apache.jackrabbit.oak.jcr.Jcr; -import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders; -import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.upgrade.cli.OakUpgrade; import org.apache.jackrabbit.oak.upgrade.cli.Util; +import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer; import org.junit.Test; public class UpgradeOldSegmentTest { @@ -54,16 +52,15 @@ public class UpgradeOldSegmentTest { File testFolder = new File(new File("target"), UpgradeOldSegmentTest.class.getSimpleName()); FileUtils.deleteDirectory(testFolder); File oldRepo = new File(testFolder, "test-repo-1.0"); - File newRepo = new File(testFolder, "test-repo-new"); oldRepo.mkdirs(); try (InputStream in = UpgradeOldSegmentTest.class.getResourceAsStream("/test-repo-1.0.zip")) { Util.unzip(in, oldRepo); } - OakUpgrade.main("segment-old:" + oldRepo.getPath(), newRepo.getPath()); + SegmentTarNodeStoreContainer newRepoContainer = new SegmentTarNodeStoreContainer(); + OakUpgrade.main("segment-old:" + oldRepo.getPath(), newRepoContainer.getDescription()); - FileStore store = fileStoreBuilder(new File(newRepo, "segmentstore")).build(); - Repository repo = new Jcr(SegmentNodeStoreBuilders.builder(store).build()).createRepository(); + Repository repo = new Jcr(newRepoContainer.open()).createRepository(); Session s = repo.login(new SimpleCredentials("admin", "admin".toCharArray())); Node myType = s.getNode("/jcr:system/jcr:nodeTypes/test:MyType"); @@ -114,8 +111,8 @@ public class UpgradeOldSegmentTest { if (repo instanceof JackrabbitRepository) { ((JackrabbitRepository) repo).shutdown(); } - store.close(); - + newRepoContainer.close(); + newRepoContainer.clean(); FileUtils.deleteDirectory(testFolder); } } Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/Jcr2ToSegmentTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/Jcr2ToSegmentTest.java?rev=1761695&r1=1761694&r2=1761695&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/Jcr2ToSegmentTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/Jcr2ToSegmentTest.java Wed Sep 21 08:25:14 2016 @@ -43,6 +43,9 @@ public class Jcr2ToSegmentTest { private Session session; + public Jcr2ToSegmentTest() throws IOException { + } + @Before public void prepare() throws Exception { File tempDir = new File("target", "test-jcr2"); Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentTarToSegmentTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentTarToSegmentTest.java?rev=1761695&r1=1761694&r2=1761695&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentTarToSegmentTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentTarToSegmentTest.java Wed Sep 21 08:25:14 2016 @@ -20,13 +20,15 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer; +import java.io.IOException; + public class SegmentTarToSegmentTest extends AbstractOak2OakTest { private final NodeStoreContainer source; private final NodeStoreContainer destination; - public SegmentTarToSegmentTest() { + public SegmentTarToSegmentTest() throws IOException { source = new SegmentTarNodeStoreContainer(); destination = new SegmentNodeStoreContainer(); } Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarTest.java?rev=1761695&r1=1761694&r2=1761695&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarTest.java Wed Sep 21 08:25:14 2016 @@ -20,13 +20,15 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import java.io.IOException; + public class SegmentToSegmentTarTest extends AbstractOak2OakTest { private final NodeStoreContainer source; private final NodeStoreContainer destination; - public SegmentToSegmentTarTest() { + public SegmentToSegmentTarTest() throws IOException { source = new SegmentNodeStoreContainer(); destination = new SegmentTarNodeStoreContainer(); } Modified: 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=1761695&r1=1761694&r2=1761695&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarWithMissingDestinationDirectoryTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTarWithMissingDestinationDirectoryTest.java Wed Sep 21 08:25:14 2016 @@ -20,18 +20,20 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer; +import java.io.IOException; + public class SegmentToSegmentTarWithMissingDestinationDirectoryTest extends AbstractOak2OakTest { private final NodeStoreContainer source; private final NodeStoreContainer destination; - public SegmentToSegmentTarWithMissingDestinationDirectoryTest() { + public SegmentToSegmentTarWithMissingDestinationDirectoryTest() throws IOException { source = new SegmentNodeStoreContainer(); destination = getSegmentTarNodeStoreContainerWithMissingDirectory(); } - private SegmentTarNodeStoreContainer getSegmentTarNodeStoreContainerWithMissingDirectory() { + private SegmentTarNodeStoreContainer getSegmentTarNodeStoreContainerWithMissingDirectory() throws IOException { SegmentTarNodeStoreContainer segmentTarNodeStoreContainer = new SegmentTarNodeStoreContainer(); segmentTarNodeStoreContainer.getDirectory().delete(); return segmentTarNodeStoreContainer; Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTest.java?rev=1761695&r1=1761694&r2=1761695&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTest.java Wed Sep 21 08:25:14 2016 @@ -19,13 +19,15 @@ package org.apache.jackrabbit.oak.upgrad import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import java.io.IOException; + public class SegmentToSegmentTest extends AbstractOak2OakTest { private final NodeStoreContainer source; private final NodeStoreContainer destination; - public SegmentToSegmentTest() { + public SegmentToSegmentTest() throws IOException { source = new SegmentNodeStoreContainer(); destination = new SegmentNodeStoreContainer(); } Modified: 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=1761695&r1=1761694&r2=1761695&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java Wed Sep 21 08:25:14 2016 @@ -19,17 +19,19 @@ package org.apache.jackrabbit.oak.upgrad import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import java.io.IOException; + public class SegmentToSegmentWithMissingDestinationDirectoryTest extends AbstractOak2OakTest { private final NodeStoreContainer source; private final NodeStoreContainer destination; - public SegmentToSegmentWithMissingDestinationDirectoryTest() { + public SegmentToSegmentWithMissingDestinationDirectoryTest() throws IOException { source = new SegmentNodeStoreContainer(); destination = getSegmentNodeStoreContainerWithMissingDirectory(); } - private SegmentNodeStoreContainer getSegmentNodeStoreContainerWithMissingDirectory() { + private SegmentNodeStoreContainer getSegmentNodeStoreContainerWithMissingDirectory() throws IOException { SegmentNodeStoreContainer segmentNodeStoreContainer = new SegmentNodeStoreContainer(); segmentNodeStoreContainer.getDirectory().delete(); return segmentNodeStoreContainer; Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFbsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFbsTest.java?rev=1761695&r1=1761694&r2=1761695&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFbsTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFbsTest.java Wed Sep 21 08:25:14 2016 @@ -22,6 +22,8 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer; +import java.io.IOException; + public class FbsToFbsTest extends AbstractOak2OakTest { private final BlobStoreContainer sourceBlob; @@ -32,7 +34,7 @@ public class FbsToFbsTest extends Abstra private final NodeStoreContainer destination; - public FbsToFbsTest() { + public FbsToFbsTest() throws IOException { sourceBlob = new FileBlobStoreContainer(); destinationBlob = new FileBlobStoreContainer(); source = new SegmentTarNodeStoreContainer(sourceBlob); Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFdsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFdsTest.java?rev=1761695&r1=1761694&r2=1761695&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFdsTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFdsTest.java Wed Sep 21 08:25:14 2016 @@ -23,6 +23,8 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer; +import java.io.IOException; + public class FbsToFdsTest extends AbstractOak2OakTest { private final BlobStoreContainer sourceBlob; @@ -33,7 +35,7 @@ public class FbsToFdsTest extends Abstra private final NodeStoreContainer destination; - public FbsToFdsTest() { + public FbsToFdsTest() throws IOException { sourceBlob = new FileBlobStoreContainer(); destinationBlob = new FileDataStoreContainer(); source = new SegmentTarNodeStoreContainer(sourceBlob); Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FdsToFbsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FdsToFbsTest.java?rev=1761695&r1=1761694&r2=1761695&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FdsToFbsTest.java (original) +++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FdsToFbsTest.java Wed Sep 21 08:25:14 2016 @@ -23,6 +23,8 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer; +import java.io.IOException; + public class FdsToFbsTest extends AbstractOak2OakTest { private final BlobStoreContainer sourceBlob; @@ -33,7 +35,7 @@ public class FdsToFbsTest extends Abstra private final NodeStoreContainer destination; - public FdsToFbsTest() { + public FdsToFbsTest() throws IOException { sourceBlob = new FileDataStoreContainer(); destinationBlob = new FileBlobStoreContainer(); source = new SegmentTarNodeStoreContainer(sourceBlob); 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=1761695&r1=1761694&r2=1761695&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 Sep 21 08:25:14 2016 @@ -18,15 +18,14 @@ package org.apache.jackrabbit.oak.upgrad import java.io.File; import java.io.IOException; +import java.nio.file.Paths; -import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore; import org.apache.jackrabbit.oak.plugins.segment.file.FileStore; import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.spi.state.NodeStore; -import com.google.common.io.Files; - +import static org.apache.jackrabbit.oak.upgrade.cli.container.SegmentTarNodeStoreContainer.deleteRecursive; import static org.apache.jackrabbit.oak.upgrade.cli.parser.StoreArguments.SEGMENT_OLD_PREFIX; public class SegmentNodeStoreContainer implements NodeStoreContainer { @@ -37,20 +36,22 @@ public class SegmentNodeStoreContainer i private FileStore fs; - public SegmentNodeStoreContainer() { - this(Files.createTempDir()); + public SegmentNodeStoreContainer() throws IOException { + this(null, null); } - public SegmentNodeStoreContainer(File directory) { - this.blob = null; - this.directory = directory; + public SegmentNodeStoreContainer(File directory) throws IOException { + this(null, directory); } - public SegmentNodeStoreContainer(BlobStoreContainer blob) { - this.blob = blob; - this.directory = Files.createTempDir(); + public SegmentNodeStoreContainer(BlobStoreContainer blob) throws IOException { + this(blob, null); } + private SegmentNodeStoreContainer(BlobStoreContainer blob, File directory) throws IOException { + this.blob = blob; + this.directory = directory == null ? java.nio.file.Files.createTempDirectory(Paths.get("target"), "segment").toFile() : directory; + } @Override public NodeStore open() throws IOException { directory.mkdirs(); @@ -75,7 +76,7 @@ public class SegmentNodeStoreContainer i @Override public void clean() throws IOException { - FileUtils.deleteDirectory(directory); + deleteRecursive(directory); if (blob != null) { blob.clean(); } 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=1761695&r1=1761694&r2=1761695&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 Sep 21 08:25:14 2016 @@ -20,35 +20,46 @@ import static org.apache.jackrabbit.oak. import java.io.File; import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; -import com.google.common.io.Files; -import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder; import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; import org.apache.jackrabbit.oak.spi.state.NodeStore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class SegmentTarNodeStoreContainer implements NodeStoreContainer { + private static final Logger LOG = LoggerFactory.getLogger(SegmentTarNodeStoreContainer.class); + private final File directory; private final BlobStoreContainer blob; private FileStore fs; - public SegmentTarNodeStoreContainer() { - this(Files.createTempDir()); + public SegmentTarNodeStoreContainer() throws IOException { + this(null, null); + } + + public SegmentTarNodeStoreContainer(File directory) throws IOException { + this(null, directory); } - public SegmentTarNodeStoreContainer(File directory) { - this.blob = null; - this.directory = directory; + public SegmentTarNodeStoreContainer(BlobStoreContainer blob) throws IOException { + this(blob, null); } - public SegmentTarNodeStoreContainer(BlobStoreContainer blob) { + private SegmentTarNodeStoreContainer(BlobStoreContainer blob, File directory) throws IOException { this.blob = blob; - this.directory = Files.createTempDir(); + this.directory = directory == null ? Files.createTempDirectory(Paths.get("target"), "segment-tar").toFile() : directory; } @Override @@ -76,7 +87,7 @@ public class SegmentTarNodeStoreContaine @Override public void clean() throws IOException { - FileUtils.deleteDirectory(directory); + deleteRecursive(directory); if (blob != null) { blob.clean(); } @@ -91,4 +102,23 @@ public class SegmentTarNodeStoreContaine return directory; } + static void deleteRecursive(File directory) { + try { + Files.walkFileTree(directory.toPath(), new SimpleFileVisitor<Path>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + Files.delete(file); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + Files.delete(dir); + return FileVisitResult.CONTINUE; + } + }); + } catch(IOException e) { + LOG.error("Can't remove directory " + directory, e); + } + } }