Repository: hadoop Updated Branches: refs/heads/HADOOP-12756 ad7308c94 -> 2e713ed9f
HADOOP-13483. File create should throw error rather than overwrite directories. Contributed by Genmao Yu. Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/2e713ed9 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/2e713ed9 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/2e713ed9 Branch: refs/heads/HADOOP-12756 Commit: 2e713ed9fd42a9dfaf768701a4c6ef312f0d95f2 Parents: ad7308c Author: Mingfei <mingfei....@intel.com> Authored: Tue Aug 23 16:18:34 2016 +0800 Committer: Mingfei <mingfei....@intel.com> Committed: Tue Aug 23 16:18:34 2016 +0800 ---------------------------------------------------------------------- .../fs/aliyun/oss/AliyunOSSFileSystem.java | 25 +++++++++++++++++--- .../oss/contract/TestOSSContractCreate.java | 6 ----- 2 files changed, 22 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/2e713ed9/hadoop-tools/hadoop-aliyun/src/main/java/org/apache/hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java ---------------------------------------------------------------------- diff --git a/hadoop-tools/hadoop-aliyun/src/main/java/org/apache/hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java b/hadoop-tools/hadoop-aliyun/src/main/java/org/apache/hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java index 6923b95..99a60db 100644 --- a/hadoop-tools/hadoop-aliyun/src/main/java/org/apache/hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java +++ b/hadoop-tools/hadoop-aliyun/src/main/java/org/apache/hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java @@ -63,6 +63,8 @@ import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PartETag; import com.aliyun.oss.model.UploadPartCopyRequest; import com.aliyun.oss.model.UploadPartCopyResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Implementation of {@link FileSystem} for <a href="https://oss.aliyun.com"> @@ -70,6 +72,8 @@ import com.aliyun.oss.model.UploadPartCopyResult; */ public class AliyunOSSFileSystem extends FileSystem { + private static final Logger LOG = + LoggerFactory.getLogger(AliyunOSSFileSystem.class); private URI uri; private Path workingDir; private OSSClient ossClient; @@ -101,9 +105,24 @@ public class AliyunOSSFileSystem extends FileSystem { boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) throws IOException { String key = pathToKey(path); + FileStatus status = null; - if (!overwrite && exists(path)) { - throw new FileAlreadyExistsException(path + " already exists"); + try { + // get the status or throw a FNFE + status = getFileStatus(path); + + // if the thread reaches here, there is something at the path + if (status.isDirectory()) { + // path references a directory + throw new FileAlreadyExistsException(path + " is a directory"); + } + if (!overwrite) { + // path references a file and overwrite is disabled + throw new FileAlreadyExistsException(path + " already exists"); + } + LOG.debug("Overwriting file {}", path); + } catch (FileNotFoundException e) { + // this means the file is not found } return new FSDataOutputStream(new AliyunOSSOutputStream(getConf(), @@ -540,7 +559,7 @@ public class AliyunOSSFileSystem extends FileSystem { /** * Used to create an empty file that represents an empty directory. * - * @param bucketName the bucket this directory belongs to + * @param bucket the bucket this directory belongs to * @param objectName directory path * @return true if directory successfully created * @throws IOException http://git-wip-us.apache.org/repos/asf/hadoop/blob/2e713ed9/hadoop-tools/hadoop-aliyun/src/test/java/org/apache/hadoop/fs/aliyun/oss/contract/TestOSSContractCreate.java ---------------------------------------------------------------------- diff --git a/hadoop-tools/hadoop-aliyun/src/test/java/org/apache/hadoop/fs/aliyun/oss/contract/TestOSSContractCreate.java b/hadoop-tools/hadoop-aliyun/src/test/java/org/apache/hadoop/fs/aliyun/oss/contract/TestOSSContractCreate.java index cc5a2d1..ce927a9 100644 --- a/hadoop-tools/hadoop-aliyun/src/test/java/org/apache/hadoop/fs/aliyun/oss/contract/TestOSSContractCreate.java +++ b/hadoop-tools/hadoop-aliyun/src/test/java/org/apache/hadoop/fs/aliyun/oss/contract/TestOSSContractCreate.java @@ -21,7 +21,6 @@ package org.apache.hadoop.fs.aliyun.oss.contract; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.contract.AbstractContractCreateTest; import org.apache.hadoop.fs.contract.AbstractFSContract; -import org.apache.hadoop.fs.contract.ContractTestUtils; /** * OSS contract creating tests. @@ -33,9 +32,4 @@ public class TestOSSContractCreate extends AbstractContractCreateTest { return new OSSContract(conf); } - @Override - public void testOverwriteEmptyDirectory() throws Throwable { - ContractTestUtils.skip( - "blobstores can't distinguish empty directories from files"); - } } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org