HADOOP-14787. AliyunOSS: Implement the createNonRecursive operator.

Contributed by Genmao Yu
This commit is contained in:
Steve Loughran 2017-08-22 11:55:48 +01:00
parent d5ff57a08f
commit 27ab5f7385
No known key found for this signature in database
GPG Key ID: 950CC3E032B79CA2

View File

@ -22,11 +22,13 @@
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CreateFlag;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileAlreadyExistsException;
@ -103,6 +105,31 @@ public FSDataOutputStream create(Path path, FsPermission permission,
store, key, progress, statistics), (Statistics)(null));
}
/**
* {@inheritDoc}
* @throws FileNotFoundException if the parent directory is not present -or
* is not a directory.
*/
@Override
public FSDataOutputStream createNonRecursive(Path path,
FsPermission permission,
EnumSet<CreateFlag> flags,
int bufferSize,
short replication,
long blockSize,
Progressable progress) throws IOException {
Path parent = path.getParent();
if (parent != null) {
// expect this to raise an exception if there is no parent
if (!getFileStatus(parent).isDirectory()) {
throw new FileAlreadyExistsException("Not a directory: " + parent);
}
}
return create(path, permission,
flags.contains(CreateFlag.OVERWRITE), bufferSize,
replication, blockSize, progress);
}
@Override
public boolean delete(Path path, boolean recursive) throws IOException {
try {