Author: tomwhite
Date: Fri Jun 11 21:13:10 2010
New Revision: 953872
URL: http://svn.apache.org/viewvc?rev=953872&view=rev
Log:
Merge -r 952470:952471 from trunk to branch-0.21. Fixes: HADOOP-6813
Modified:
hadoop/common/branches/branch-0.21/CHANGES.txt
hadoop/common/branches/branch-0.21/src/java/org/apache/hadoop/fs/FileSystem.java
hadoop/common/branches/branch-0.21/src/test/core/org/apache/hadoop/fs/TestFileSystemCaching.java
Modified: hadoop/common/branches/branch-0.21/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.21/CHANGES.txt?rev=953872&r1=953871&r2=953872&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.21/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.21/CHANGES.txt Fri Jun 11 21:13:10 2010
@@ -861,6 +861,9 @@ Release 0.21.0 - Unreleased
HADOOP-6769. Add an API in FileSystem to get FileSystem instances based
on users(ddas via boryas)
+ HADOOP-6813. Add a new newInstance method in FileSystem that takes
+ a "user" as argument (ddas via boryas)
+
OPTIMIZATIONS
HADOOP-5595. NameNode does not need to run a replicator to choose a
Modified:
hadoop/common/branches/branch-0.21/src/java/org/apache/hadoop/fs/FileSystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.21/src/java/org/apache/hadoop/fs/FileSystem.java?rev=953872&r1=953871&r2=953872&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.21/src/java/org/apache/hadoop/fs/FileSystem.java
(original)
+++
hadoop/common/branches/branch-0.21/src/java/org/apache/hadoop/fs/FileSystem.java
Fri Jun 11 21:13:10 2010
@@ -230,6 +230,30 @@ public abstract class FileSystem extends
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
* of the URI determines a configuration property name,
* <tt>fs.<i>scheme</i>.class</tt> whose value names the FileSystem class.
Modified:
hadoop/common/branches/branch-0.21/src/test/core/org/apache/hadoop/fs/TestFileSystemCaching.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.21/src/test/core/org/apache/hadoop/fs/TestFileSystemCaching.java?rev=953872&r1=953871&r2=953872&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.21/src/test/core/org/apache/hadoop/fs/TestFileSystemCaching.java
(original)
+++
hadoop/common/branches/branch-0.21/src/test/core/org/apache/hadoop/fs/TestFileSystemCaching.java
Fri Jun 11 21:13:10 2010
@@ -35,7 +35,7 @@ import java.security.PrivilegedException
import java.util.concurrent.Semaphore;
import static org.mockito.Mockito.mock;
-
+import static junit.framework.Assert.assertTrue;
public class TestFileSystemCaching {
@@ -158,10 +158,27 @@ public class TestFileSystemCaching {
@Test
public void testUserFS() throws Exception {
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 fsU2 = FileSystem.get(new URI("cachedfile://a"), conf, "foo");
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();
+ }
}