HADOOP-6813. Add a new newInstance method in FileSystem that takes a user as argument
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@952471 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
42a38a4b58
commit
2232093326
|
@ -44,6 +44,9 @@ Trunk (unreleased changes)
|
||||||
HADOOP-6674. Makes use of the SASL authentication options in the
|
HADOOP-6674. Makes use of the SASL authentication options in the
|
||||||
SASL RPC. (Jitendra Pandey via ddas)
|
SASL RPC. (Jitendra Pandey via ddas)
|
||||||
|
|
||||||
|
HADOOP-6813. Add a new newInstance method in FileSystem that takes
|
||||||
|
a "user" as argument (ddas via boryas)
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
HADOOP-6638. try to relogin in a case of failed RPC connection (expired tgt)
|
HADOOP-6638. try to relogin in a case of failed RPC connection (expired tgt)
|
||||||
only in case the subject is loginUser or proxyUgi.realUser. (boryas)
|
only in case the subject is loginUser or proxyUgi.realUser. (boryas)
|
||||||
|
|
|
@ -230,6 +230,30 @@ public abstract class FileSystem extends Configured implements Closeable {
|
||||||
return CACHE.get(uri, conf);
|
return CACHE.get(uri, conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the FileSystem for this URI's scheme and authority and the
|
||||||
|
* passed user. Internally invokes {@link #newInstance(URI, Configuration)}
|
||||||
|
* @param uri
|
||||||
|
* @param conf
|
||||||
|
* @param user
|
||||||
|
* @return filesystem instance
|
||||||
|
* @throws IOException
|
||||||
|
* @throws InterruptedException
|
||||||
|
*/
|
||||||
|
public static FileSystem newInstance(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 newInstance(uri,conf);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
/** Returns the FileSystem for this URI's scheme and authority. The scheme
|
/** Returns the FileSystem for this URI's scheme and authority. The scheme
|
||||||
* of the URI determines a configuration property name,
|
* of the URI determines a configuration property name,
|
||||||
* <tt>fs.<i>scheme</i>.class</tt> whose value names the FileSystem class.
|
* <tt>fs.<i>scheme</i>.class</tt> whose value names the FileSystem class.
|
||||||
|
|
|
@ -35,7 +35,7 @@ import java.security.PrivilegedExceptionAction;
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static junit.framework.Assert.assertTrue;
|
||||||
|
|
||||||
|
|
||||||
public class TestFileSystemCaching {
|
public class TestFileSystemCaching {
|
||||||
|
@ -158,10 +158,27 @@ public class TestFileSystemCaching {
|
||||||
@Test
|
@Test
|
||||||
public void testUserFS() throws Exception {
|
public void testUserFS() throws Exception {
|
||||||
final Configuration conf = new Configuration();
|
final Configuration conf = new Configuration();
|
||||||
|
conf.set("fs.cachedfile.impl", conf.get("fs.file.impl"));
|
||||||
FileSystem fsU1 = FileSystem.get(new URI("cachedfile://a"), conf, "bar");
|
FileSystem fsU1 = FileSystem.get(new URI("cachedfile://a"), conf, "bar");
|
||||||
FileSystem fsU2 = FileSystem.get(new URI("cachedfile://a"), conf, "foo");
|
FileSystem fsU2 = FileSystem.get(new URI("cachedfile://a"), conf, "foo");
|
||||||
|
|
||||||
assertNotSame(fsU1, fsU2);
|
assertNotSame(fsU1, fsU2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFsUniqueness() throws Exception {
|
||||||
|
final Configuration conf = new Configuration();
|
||||||
|
conf.set("fs.cachedfile.impl", conf.get("fs.file.impl"));
|
||||||
|
// multiple invocations of FileSystem.get return the same object.
|
||||||
|
FileSystem fs1 = FileSystem.get(conf);
|
||||||
|
FileSystem fs2 = FileSystem.get(conf);
|
||||||
|
assertTrue(fs1 == fs2);
|
||||||
|
|
||||||
|
// multiple invocations of FileSystem.newInstance return different objects
|
||||||
|
fs1 = FileSystem.newInstance(new URI("cachedfile://a"), conf, "bar");
|
||||||
|
fs2 = FileSystem.newInstance(new URI("cachedfile://a"), conf, "bar");
|
||||||
|
assertTrue(fs1 != fs2 && !fs1.equals(fs2));
|
||||||
|
fs1.close();
|
||||||
|
fs2.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue