HADOOP-6886. svn merge -c 1212073 from trunk

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1212078 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Eli Collins 2011-12-08 20:06:25 +00:00
parent 8ebf00f90f
commit dd4707ba71
4 changed files with 50 additions and 10 deletions

View File

@ -33,6 +33,9 @@ Release 0.23.1 - Unreleased
HADOOP-6840. Support non-recursive create() in FileSystem and HADOOP-6840. Support non-recursive create() in FileSystem and
SequenceFile.Writer. (jitendra and eli via eli) SequenceFile.Writer. (jitendra and eli via eli)
HADOOP-6886. LocalFileSystem Needs createNonRecursive API.
(Nicolas Spiegelberg and eli via eli)
OPTIMIZATIONS OPTIMIZATIONS
BUG FIXES BUG FIXES

View File

@ -20,8 +20,6 @@ package org.apache.hadoop.fs;
import java.io.*; import java.io.*;
import java.util.Arrays; import java.util.Arrays;
import java.util.Iterator;
import java.util.zip.CRC32;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -31,7 +29,6 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.util.Progressable; import org.apache.hadoop.util.Progressable;
import org.apache.hadoop.util.PureJavaCrc32; import org.apache.hadoop.util.PureJavaCrc32;
import org.apache.hadoop.util.StringUtils;
/**************************************************************** /****************************************************************
* Abstract Checksumed FileSystem. * Abstract Checksumed FileSystem.
@ -389,9 +386,22 @@ public abstract class ChecksumFileSystem extends FilterFileSystem {
public FSDataOutputStream create(Path f, FsPermission permission, public FSDataOutputStream create(Path f, FsPermission permission,
boolean overwrite, int bufferSize, short replication, long blockSize, boolean overwrite, int bufferSize, short replication, long blockSize,
Progressable progress) throws IOException { Progressable progress) throws IOException {
return create(f, permission, overwrite, true, bufferSize,
replication, blockSize, progress);
}
private FSDataOutputStream create(Path f, FsPermission permission,
boolean overwrite, boolean createParent, int bufferSize,
short replication, long blockSize,
Progressable progress) throws IOException {
Path parent = f.getParent(); Path parent = f.getParent();
if (parent != null && !mkdirs(parent)) { if (parent != null) {
throw new IOException("Mkdirs failed to create " + parent); if (!createParent && !exists(parent)) {
throw new FileNotFoundException("Parent directory doesn't exist: "
+ parent);
} else if (!mkdirs(parent)) {
throw new IOException("Mkdirs failed to create " + parent);
}
} }
final FSDataOutputStream out = new FSDataOutputStream( final FSDataOutputStream out = new FSDataOutputStream(
new ChecksumFSOutputSummer(this, f, overwrite, bufferSize, replication, new ChecksumFSOutputSummer(this, f, overwrite, bufferSize, replication,
@ -402,6 +412,15 @@ public abstract class ChecksumFileSystem extends FilterFileSystem {
return out; return out;
} }
/** {@inheritDoc} */
@Override
public FSDataOutputStream createNonRecursive(Path f, FsPermission permission,
boolean overwrite, int bufferSize, short replication, long blockSize,
Progressable progress) throws IOException {
return create(f, permission, overwrite, false, bufferSize, replication,
blockSize, progress);
}
/** /**
* Set replication for an existing file. * Set replication for an existing file.
* Implement the abstract <tt>setReplication</tt> of <tt>FileSystem</tt> * Implement the abstract <tt>setReplication</tt> of <tt>FileSystem</tt>

View File

@ -871,10 +871,10 @@ public abstract class FileSystem extends Configured implements Closeable {
*/ */
@Deprecated @Deprecated
public FSDataOutputStream createNonRecursive(Path f, FsPermission permission, public FSDataOutputStream createNonRecursive(Path f, FsPermission permission,
boolean overwrite, boolean overwrite, int bufferSize, short replication, long blockSize,
int bufferSize, short replication, long blockSize,
Progressable progress) throws IOException { Progressable progress) throws IOException {
throw new IOException("createNonRecursive unsupported for this filesystem"); throw new IOException("createNonRecursive unsupported for this filesystem "
+ this.getClass());
} }
/** /**

View File

@ -29,7 +29,6 @@ import java.io.OutputStream;
import java.net.URI; import java.net.URI;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Arrays; import java.util.Arrays;
import java.util.EnumSet;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceAudience;
@ -238,9 +237,16 @@ public class RawLocalFileSystem extends FileSystem {
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override
public FSDataOutputStream create(Path f, boolean overwrite, int bufferSize, public FSDataOutputStream create(Path f, boolean overwrite, int bufferSize,
short replication, long blockSize, Progressable progress) short replication, long blockSize, Progressable progress)
throws IOException { throws IOException {
return create(f, overwrite, true, bufferSize, replication, blockSize, progress);
}
private FSDataOutputStream create(Path f, boolean overwrite,
boolean createParent, int bufferSize, short replication, long blockSize,
Progressable progress) throws IOException {
if (exists(f) && !overwrite) { if (exists(f) && !overwrite) {
throw new IOException("File already exists: "+f); throw new IOException("File already exists: "+f);
} }
@ -263,7 +269,19 @@ public class RawLocalFileSystem extends FileSystem {
setPermission(f, permission); setPermission(f, permission);
return out; return out;
} }
/** {@inheritDoc} */
@Override
public FSDataOutputStream createNonRecursive(Path f, FsPermission permission,
boolean overwrite,
int bufferSize, short replication, long blockSize,
Progressable progress) throws IOException {
FSDataOutputStream out = create(f,
overwrite, false, bufferSize, replication, blockSize, progress);
setPermission(f, permission);
return out;
}
public boolean rename(Path src, Path dst) throws IOException { public boolean rename(Path src, Path dst) throws IOException {
if (pathToFile(src).renameTo(pathToFile(dst))) { if (pathToFile(src).renameTo(pathToFile(dst))) {
return true; return true;