HADOOP-6769. Add an API in FileSystem to get FileSystem instances based on users

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@945735 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Boris Shkolnik 2010-05-18 16:21:24 +00:00
parent 175a92850d
commit 759494f3a1
3 changed files with 39 additions and 1 deletions

View File

@ -3,6 +3,8 @@ Hadoop Change Log
Trunk (unreleased changes)
IMPROVEMENTS
HADOOP-6769. Add an API in FileSystem to get FileSystem instances based
on users(ddas via boryas)
HADOOP-6600. mechanism for authorization check for inter-server
protocols. (boryas)

View File

@ -21,6 +21,7 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
@ -95,6 +96,31 @@ public abstract class FileSystem extends Configured implements Closeable {
* or the JVM is exited.
*/
private Set<Path> deleteOnExit = new TreeSet<Path>();
/**
* Get a filesystem instance based on the uri, the passed
* configuration and the user
* @param uri
* @param conf
* @param user
* @return the filesystem instance
* @throws IOException
* @throws InterruptedException
*/
public static FileSystem get(final URI uri, final Configuration conf,
final String user) throws IOException, InterruptedException {
UserGroupInformation ugi;
if (user == null) {
ugi = UserGroupInformation.getCurrentUser();
} else {
ugi = UserGroupInformation.createRemoteUser(user);
}
return ugi.doAs(new PrivilegedExceptionAction<FileSystem>() {
public FileSystem run() throws IOException {
return get(uri, conf);
}
});
}
/** Returns the configured filesystem implementation.*/
public static FileSystem get(Configuration conf) throws IOException {

View File

@ -26,6 +26,7 @@
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.security.token.TokenIdentifier;
@ -153,5 +154,14 @@ public FileSystem run() throws Exception {
//We should have the same filesystem for both
assertSame(fsA, fsA1);
}
@Test
public void testUserFS() throws Exception {
final Configuration conf = new Configuration();
FileSystem fsU1 = FileSystem.get(new URI("cachedfile://a"), conf, "bar");
FileSystem fsU2 = FileSystem.get(new URI("cachedfile://a"), conf, "foo");
assertNotSame(fsU1, fsU2);
}
}