diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 3059e277ae..1e67997fee 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -14,6 +14,9 @@ Trunk (unreleased changes) IMPROVEMENTS + HADOOP-8015. ChRootFileSystem should extend FilterFileSystem + (Daryn Sharp via bobby) + HADOOP-7595. Upgrade dependency to Avro 1.5.3. (Alejandro Abdelnur via atm) HADOOP-7524. Change RPC to allow multiple protocols including multuple diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FilterFileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FilterFileSystem.java index cedf802228..8df51b3ac8 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FilterFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FilterFileSystem.java @@ -63,6 +63,14 @@ public FilterFileSystem(FileSystem fs) { this.statistics = fs.statistics; } + /** + * Get the raw file system + * @return FileSystem being filtered + */ + public FileSystem getRawFileSystem() { + return fs; + } + /** Called after a new FileSystem instance is constructed. * @param name a uri whose authority section names the host, port, etc. * for this FileSystem diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ChRootedFileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ChRootedFileSystem.java index 580b682e43..84eb55ce13 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ChRootedFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ChRootedFileSystem.java @@ -20,7 +20,6 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.util.List; import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceStability; @@ -31,11 +30,11 @@ import org.apache.hadoop.fs.FileChecksum; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.FilterFileSystem; import org.apache.hadoop.fs.FsServerDefaults; import org.apache.hadoop.fs.FsStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.permission.FsPermission; -import org.apache.hadoop.security.token.Token; import org.apache.hadoop.util.Progressable; /** @@ -60,15 +59,14 @@ @InterfaceAudience.Private @InterfaceStability.Evolving /*Evolving for a release,to be changed to Stable */ -class ChRootedFileSystem extends FileSystem { - private final FileSystem myFs; // the base file system whose root is changed +class ChRootedFileSystem extends FilterFileSystem { private final URI myUri; // the base URI + the chRoot private final Path chRootPathPart; // the root below the root of the base private final String chRootPathPartString; private Path workingDir; protected FileSystem getMyFs() { - return myFs; + return getRawFileSystem(); } /** @@ -90,8 +88,8 @@ protected Path fullPath(final Path path) { */ public ChRootedFileSystem(final FileSystem fs, final Path theRoot) throws URISyntaxException { - myFs = fs; - myFs.makeQualified(theRoot); //check that root is a valid path for fs + super(fs); + makeQualified(theRoot); //check that root is a valid path for fs // Would like to call myFs.checkPath(theRoot); // but not public chRootPathPart = new Path(theRoot.toUri().getPath()); @@ -111,8 +109,8 @@ public ChRootedFileSystem(final FileSystem fs, final Path theRoot) */ // Handle the two cases: // scheme:/// and scheme://authority/ - myUri = new URI(myFs.getUri().toString() + - (myFs.getUri().getAuthority() == null ? "" : Path.SEPARATOR) + + myUri = new URI(fs.getUri().toString() + + (fs.getUri().getAuthority() == null ? "" : Path.SEPARATOR) + chRootPathPart.toString().substring(1)); workingDir = getHomeDirectory(); @@ -127,7 +125,6 @@ public ChRootedFileSystem(final FileSystem fs, final Path theRoot) */ public void initialize(final URI name, final Configuration conf) throws IOException { - myFs.initialize(name, conf); super.initialize(name, conf); setConf(conf); } @@ -137,12 +134,6 @@ public URI getUri() { return myUri; } - @Override - public Path makeQualified(final Path path) { - return myFs.makeQualified(path); - // NOT myFs.makeQualified(fullPath(path)); - } - /** * Strip out the root from the path. * @param p - fully qualified path p @@ -175,7 +166,7 @@ protected Path getInitialWorkingDirectory() { public Path getResolvedQualifiedPath(final Path f) throws FileNotFoundException { - return myFs.makeQualified( + return makeQualified( new Path(chRootPathPartString + f.toUri().toString())); } @@ -199,14 +190,14 @@ public void setWorkingDirectory(final Path new_dir) { public FSDataOutputStream create(final Path f, final FsPermission permission, final boolean overwrite, final int bufferSize, final short replication, final long blockSize, final Progressable progress) throws IOException { - return myFs.create(fullPath(f), permission, overwrite, bufferSize, + return super.create(fullPath(f), permission, overwrite, bufferSize, replication, blockSize, progress); } @Override public boolean delete(final Path f, final boolean recursive) throws IOException { - return myFs.delete(fullPath(f), recursive); + return super.delete(fullPath(f), recursive); } @@ -219,95 +210,90 @@ public boolean delete(Path f) throws IOException { @Override public BlockLocation[] getFileBlockLocations(final FileStatus fs, final long start, final long len) throws IOException { - return myFs.getFileBlockLocations( + return super.getFileBlockLocations( new ViewFsFileStatus(fs, fullPath(fs.getPath())), start, len); } @Override public FileChecksum getFileChecksum(final Path f) throws IOException { - return myFs.getFileChecksum(fullPath(f)); + return super.getFileChecksum(fullPath(f)); } @Override public FileStatus getFileStatus(final Path f) throws IOException { - return myFs.getFileStatus(fullPath(f)); + return super.getFileStatus(fullPath(f)); } @Override public FsStatus getStatus(Path p) throws IOException { - return myFs.getStatus(fullPath(p)); + return super.getStatus(fullPath(p)); } @Override public FsServerDefaults getServerDefaults() throws IOException { - return myFs.getServerDefaults(); + return super.getServerDefaults(); } @Override public FileStatus[] listStatus(final Path f) throws IOException { - return myFs.listStatus(fullPath(f)); + return super.listStatus(fullPath(f)); } @Override public boolean mkdirs(final Path f, final FsPermission permission) throws IOException { - return myFs.mkdirs(fullPath(f), permission); + return super.mkdirs(fullPath(f), permission); } @Override public FSDataInputStream open(final Path f, final int bufferSize) throws IOException { - return myFs.open(fullPath(f), bufferSize); + return super.open(fullPath(f), bufferSize); } @Override public FSDataOutputStream append(final Path f, final int bufferSize, final Progressable progress) throws IOException { - return myFs.append(fullPath(f), bufferSize, progress); + return super.append(fullPath(f), bufferSize, progress); } @Override public boolean rename(final Path src, final Path dst) throws IOException { // note fullPath will check that paths are relative to this FileSystem. // Hence both are in same file system and a rename is valid - return myFs.rename(fullPath(src), fullPath(dst)); + return super.rename(fullPath(src), fullPath(dst)); } @Override public void setOwner(final Path f, final String username, final String groupname) throws IOException { - myFs.setOwner(fullPath(f), username, groupname); + super.setOwner(fullPath(f), username, groupname); } @Override public void setPermission(final Path f, final FsPermission permission) throws IOException { - myFs.setPermission(fullPath(f), permission); + super.setPermission(fullPath(f), permission); } @Override public boolean setReplication(final Path f, final short replication) throws IOException { - return myFs.setReplication(fullPath(f), replication); + return super.setReplication(fullPath(f), replication); } @Override public void setTimes(final Path f, final long mtime, final long atime) throws IOException { - myFs.setTimes(fullPath(f), mtime, atime); - } - - @Override - public void setVerifyChecksum(final boolean verifyChecksum) { - myFs.setVerifyChecksum(verifyChecksum); + super.setTimes(fullPath(f), mtime, atime); } @Override - public List> getDelegationTokens(String renewer) throws IOException { - return myFs.getDelegationTokens(renewer); + public Path resolvePath(final Path p) throws IOException { + return super.resolvePath(fullPath(p)); } }