HDFS-13054. Handling PathIsNotEmptyDirectoryException in DFSClient delete call. Contributed by Nanda kumar.
This commit is contained in:
parent
a37e7f0ad8
commit
e990904dd5
@ -82,6 +82,7 @@
|
|||||||
import org.apache.hadoop.fs.Options.ChecksumOpt;
|
import org.apache.hadoop.fs.Options.ChecksumOpt;
|
||||||
import org.apache.hadoop.fs.ParentNotDirectoryException;
|
import org.apache.hadoop.fs.ParentNotDirectoryException;
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
|
import org.apache.hadoop.fs.PathIsNotEmptyDirectoryException;
|
||||||
import org.apache.hadoop.fs.QuotaUsage;
|
import org.apache.hadoop.fs.QuotaUsage;
|
||||||
import org.apache.hadoop.fs.RemoteIterator;
|
import org.apache.hadoop.fs.RemoteIterator;
|
||||||
import org.apache.hadoop.fs.StorageType;
|
import org.apache.hadoop.fs.StorageType;
|
||||||
@ -1620,7 +1621,8 @@ public boolean delete(String src, boolean recursive) throws IOException {
|
|||||||
FileNotFoundException.class,
|
FileNotFoundException.class,
|
||||||
SafeModeException.class,
|
SafeModeException.class,
|
||||||
UnresolvedPathException.class,
|
UnresolvedPathException.class,
|
||||||
SnapshotAccessControlException.class);
|
SnapshotAccessControlException.class,
|
||||||
|
PathIsNotEmptyDirectoryException.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
import org.apache.hadoop.classification.InterfaceStability;
|
import org.apache.hadoop.classification.InterfaceStability;
|
||||||
import org.apache.hadoop.crypto.CryptoProtocolVersion;
|
import org.apache.hadoop.crypto.CryptoProtocolVersion;
|
||||||
import org.apache.hadoop.fs.BatchedRemoteIterator.BatchedEntries;
|
import org.apache.hadoop.fs.BatchedRemoteIterator.BatchedEntries;
|
||||||
|
import org.apache.hadoop.fs.PathIsNotEmptyDirectoryException;
|
||||||
import org.apache.hadoop.hdfs.AddBlockFlag;
|
import org.apache.hadoop.hdfs.AddBlockFlag;
|
||||||
import org.apache.hadoop.fs.CacheFlag;
|
import org.apache.hadoop.fs.CacheFlag;
|
||||||
import org.apache.hadoop.fs.ContentSummary;
|
import org.apache.hadoop.fs.ContentSummary;
|
||||||
@ -625,6 +626,8 @@ boolean truncate(String src, long newLength, String clientName)
|
|||||||
* @throws org.apache.hadoop.fs.UnresolvedLinkException If <code>src</code>
|
* @throws org.apache.hadoop.fs.UnresolvedLinkException If <code>src</code>
|
||||||
* contains a symlink
|
* contains a symlink
|
||||||
* @throws SnapshotAccessControlException if path is in RO snapshot
|
* @throws SnapshotAccessControlException if path is in RO snapshot
|
||||||
|
* @throws PathIsNotEmptyDirectoryException if path is a non-empty directory
|
||||||
|
* and <code>recursive</code> is set to false
|
||||||
* @throws IOException If an I/O error occurred
|
* @throws IOException If an I/O error occurred
|
||||||
*/
|
*/
|
||||||
@AtMostOnce
|
@AtMostOnce
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
import org.apache.hadoop.fs.MD5MD5CRC32FileChecksum;
|
import org.apache.hadoop.fs.MD5MD5CRC32FileChecksum;
|
||||||
import org.apache.hadoop.fs.Options.ChecksumOpt;
|
import org.apache.hadoop.fs.Options.ChecksumOpt;
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
|
import org.apache.hadoop.fs.PathIsNotEmptyDirectoryException;
|
||||||
import org.apache.hadoop.fs.RemoteIterator;
|
import org.apache.hadoop.fs.RemoteIterator;
|
||||||
import org.apache.hadoop.fs.StorageStatistics.LongStatistic;
|
import org.apache.hadoop.fs.StorageStatistics.LongStatistic;
|
||||||
import org.apache.hadoop.fs.StorageType;
|
import org.apache.hadoop.fs.StorageType;
|
||||||
@ -571,6 +572,22 @@ public void testDFSClient() throws Exception {
|
|||||||
in.close();
|
in.close();
|
||||||
fs.close();
|
fs.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Test PathIsNotEmptyDirectoryException while deleting non-empty dir
|
||||||
|
FileSystem fs = cluster.getFileSystem();
|
||||||
|
fs.mkdirs(new Path("/test/nonEmptyDir"));
|
||||||
|
fs.create(new Path("/tmp/nonEmptyDir/emptyFile")).close();
|
||||||
|
try {
|
||||||
|
fs.delete(new Path("/tmp/nonEmptyDir"), false);
|
||||||
|
Assert.fail("Expecting PathIsNotEmptyDirectoryException");
|
||||||
|
} catch (PathIsNotEmptyDirectoryException ex) {
|
||||||
|
// This is the proper exception to catch; move on.
|
||||||
|
}
|
||||||
|
Assert.assertTrue(fs.exists(new Path("/test/nonEmptyDir")));
|
||||||
|
fs.delete(new Path("/tmp/nonEmptyDir"), true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (cluster != null) {cluster.shutdown();}
|
if (cluster != null) {cluster.shutdown();}
|
||||||
|
Loading…
Reference in New Issue
Block a user