/** * Deletes the directory at the given path if it exists. * * @param ufs instance of {@link UnderFileSystem} * @param path path to the directory */ public static void deleteDirIfExists(UnderFileSystem ufs, String path) throws IOException { if (ufs.isDirectory(path) && !ufs.deleteDirectory(path, DeleteOptions.defaults().setRecursive(true))) { throw new IOException("Folder " + path + " already exists but can not be deleted."); } }
/** * Tests getting and setting fields. */ @Test public void fields() { DeleteOptions options = DeleteOptions.defaults(); boolean recursive = false; options.setRecursive(recursive); Assert.assertEquals(recursive, options.isRecursive()); recursive = true; options.setRecursive(recursive); Assert.assertEquals(recursive, options.isRecursive()); }
/** * @return the default {@link DeleteOptions} */ public static DeleteOptions defaults() { return new DeleteOptions(); }
/** * Tests for default {@link DeleteOptions}. */ @Test public void defaults() throws IOException { DeleteOptions options = DeleteOptions.defaults(); Assert.assertEquals(false, options.isRecursive()); }
@Override public boolean deleteDirectory(String path, DeleteOptions options) throws IOException { return isDirectory(path) && delete(path, options.isRecursive()); }
@Override public boolean deleteDirectory(String path) throws IOException { return deleteDirectory(path, DeleteOptions.defaults()); }
@Override public boolean deleteDirectory(String path, DeleteOptions options) throws IOException { if (!options.isRecursive()) { UfsStatus[] children = listInternal(path, ListOptions.defaults()); if (children == null) {
@Override public boolean deleteDirectory(String path) throws IOException { return deleteDirectory(path, DeleteOptions.defaults()); }
if (p.isDirectory()) { failedToDelete = !ufs.deleteDirectory(childPath.toString(), DeleteOptions.defaults().setRecursive(true)); } else { failedToDelete = !ufs.deleteFile(childPath.toString());
@Override public boolean deleteDirectory(String path, DeleteOptions options) throws IOException { path = stripPath(path); File file = new File(path); if (!file.isDirectory()) { return false; } boolean success = true; if (options.isRecursive()) { String[] files = file.list(); // File.list() will return null if an I/O error occurs. // e.g.: Reading an non-readable directory if (files != null) { for (String child : files) { String childPath = PathUtils.concatPath(path, child); if (isDirectory(childPath)) { success = success && deleteDirectory(childPath, DeleteOptions.defaults().setRecursive(true)); } else { success = success && deleteFile(PathUtils.concatPath(path, child)); } } } } return success && file.delete(); }
@Override public boolean deleteDirectory(String path, DeleteOptions options) throws IOException { return isDirectory(path) && delete(path, options.isRecursive()); }
/** * @return the default {@link DeleteOptions} */ public static DeleteOptions defaults() { return new DeleteOptions(); }
/** * Formats the journal. */ public void format() throws IOException { URI location = getLocation(); LOG.info("Formatting {}", location); if (mUfs.isDirectory(location.toString())) { for (UfsStatus status : mUfs.listStatus(location.toString())) { String childPath = URIUtils.appendPathOrDie(location, status.getName()).toString(); if (status.isDirectory() && !mUfs.deleteDirectory(childPath, DeleteOptions.defaults().setRecursive(true)) || status.isFile() && !mUfs.deleteFile(childPath)) { throw new IOException(String.format("Failed to delete %s", childPath)); } } } else if (!mUfs.mkdirs(location.toString())) { throw new IOException(String.format("Failed to create %s", location)); } // Create a breadcrumb that indicates that the journal folder has been formatted. UnderFileSystemUtils.touch(mUfs, URIUtils.appendPathOrDie(location, ServerConfiguration.get(PropertyKey.MASTER_FORMAT_FILE_PREFIX) + System.currentTimeMillis()) .toString()); }
@Override public boolean deleteDirectory(String path, DeleteOptions options) throws IOException { if (!options.isRecursive()) { UfsStatus[] children = listInternal(path, ListOptions.defaults()); if (children == null) {
@After public final void after() throws Exception { mConfiguration = ConfigurationTestUtils.defaults(); mUfs.deleteDirectory(mUnderfsAddress, DeleteOptions.defaults().setRecursive(true)); mUfs.close(); }
if (isRecursiveDeleteSafe(alluxioUri)) { if (!ufs.deleteDirectory(ufsUri, alluxio.underfs.options.DeleteOptions.defaults().setRecursive(true))) {
String path = ServerConfiguration.get(PropertyKey.MASTER_MOUNT_TABLE_ROOT_UFS); if (ufs.isDirectory(path)) { ufs.deleteDirectory(path, DeleteOptions.defaults().setRecursive(true));
return deleteDirectory(src, DeleteOptions.defaults().setRecursive(true));
@Test public void deleteLargeDirectory() throws IOException { LargeDirectoryConfig config = prepareLargeDirectoryTest(); mUfs.deleteDirectory(config.getTopLevelDirectory(), DeleteOptions.defaults().setRecursive(true)); String[] children = config.getChildren(); for (String child : children) { // Retry for some time to allow list operation eventual consistency for S3 and GCS. // See http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html and // https://cloud.google.com/storage/docs/consistency for more details. // Note: not using CommonUtils.waitFor here because we intend to sleep with a longer interval. boolean childDeleted = false; for (int i = 0; i < 20; i++) { childDeleted = !mUfs.isFile(child) && !mUfs.isDirectory(child); if (childDeleted) { break; } CommonUtils.sleepMs(500); } assertTrue(childDeleted); } }
@Test public void deleteDir() throws IOException { String testDirEmpty = PathUtils.concatPath(mUnderfsAddress, "testDirEmpty"); String testDirNonEmpty = PathUtils.concatPath(mUnderfsAddress, "testDirNonEmpty1"); String testDirNonEmptyChildDir = PathUtils.concatPath(testDirNonEmpty, "testDirNonEmpty2"); String testDirNonEmptyChildFile = PathUtils.concatPath(testDirNonEmpty, "testDirNonEmptyF"); String testDirNonEmptyChildDirFile = PathUtils.concatPath(testDirNonEmptyChildDir, "testDirNonEmptyChildDirF"); mUfs.mkdirs(testDirEmpty, MkdirsOptions.defaults(mConfiguration).setCreateParent(false)); mUfs.mkdirs(testDirNonEmpty, MkdirsOptions.defaults(mConfiguration).setCreateParent(false)); mUfs.mkdirs(testDirNonEmptyChildDir, MkdirsOptions.defaults(mConfiguration) .setCreateParent(false)); createEmptyFile(testDirNonEmptyChildFile); createEmptyFile(testDirNonEmptyChildDirFile); mUfs.deleteDirectory(testDirEmpty, DeleteOptions.defaults().setRecursive(false)); assertFalse(mUfs.isDirectory(testDirEmpty)); try { mUfs.deleteDirectory(testDirNonEmpty, DeleteOptions.defaults().setRecursive(false)); } catch (IOException e) { // Some File systems may throw IOException } assertTrue(mUfs.isDirectory(testDirNonEmpty)); mUfs.deleteDirectory(testDirNonEmpty, DeleteOptions.defaults().setRecursive(true)); assertFalse(mUfs.isDirectory(testDirNonEmpty)); assertFalse(mUfs.isDirectory(testDirNonEmptyChildDir)); assertFalse(mUfs.isFile(testDirNonEmptyChildFile)); assertFalse(mUfs.isFile(testDirNonEmptyChildDirFile)); }