Author: bobby
Date: Tue Jul 24 19:02:22 2012
New Revision: 1365226
URL: http://svn.apache.org/viewvc?rev=1365226&view=rev
Log:
svn merge -c 1365224 FIXES: HADOOP-8606. FileSystem.get may return the wrong
filesystem (Daryn Sharp via bobby)
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1365226&r1=1365225&r2=1365226&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
Tue Jul 24 19:02:22 2012
@@ -657,6 +657,9 @@ Release 0.23.3 - UNRELEASED
HADOOP-8599. Non empty response from FileSystem.getFileBlockLocations when
asking for data beyond the end of file. (Andrey Klochkov via todd)
+ HADOOP-8606. FileSystem.get may return the wrong filesystem (Daryn Sharp
+ via bobby)
+
Release 0.23.2 - UNRELEASED
NEW FEATURES
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java?rev=1365226&r1=1365225&r2=1365226&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
Tue Jul 24 19:02:22 2012
@@ -280,11 +280,11 @@ public abstract class FileSystem extends
String scheme = uri.getScheme();
String authority = uri.getAuthority();
- if (scheme == null) { // no scheme: use default FS
+ if (scheme == null && authority == null) { // use default FS
return get(conf);
}
- if (authority == null) { // no authority
+ if (scheme != null && authority == null) { // no authority
URI defaultUri = getDefaultUri(conf);
if (scheme.equals(defaultUri.getScheme()) // if scheme matches default
&& defaultUri.getAuthority() != null) { // & default has authority
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java?rev=1365226&r1=1365225&r2=1365226&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java
Tue Jul 24 19:02:22 2012
@@ -34,8 +34,8 @@ import org.junit.Test;
import java.security.PrivilegedExceptionAction;
import java.util.concurrent.Semaphore;
+import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
-import static junit.framework.Assert.assertTrue;
public class TestFileSystemCaching {
@@ -49,6 +49,65 @@ public class TestFileSystemCaching {
assertSame(fs1, fs2);
}
+ static class DefaultFs extends LocalFileSystem {
+ URI uri;
+ @Override
+ public void initialize(URI uri, Configuration conf) {
+ this.uri = uri;
+ }
+ @Override
+ public URI getUri() {
+ return uri;
+ }
+ }
+
+ @Test
+ public void testDefaultFsUris() throws Exception {
+ final Configuration conf = new Configuration();
+ conf.set("fs.defaultfs.impl", DefaultFs.class.getName());
+ final URI defaultUri = URI.create("defaultfs://host");
+ FileSystem.setDefaultUri(conf, defaultUri);
+ FileSystem fs = null;
+
+ // sanity check default fs
+ final FileSystem defaultFs = FileSystem.get(conf);
+ assertEquals(defaultUri, defaultFs.getUri());
+
+ // has scheme, no auth
+ fs = FileSystem.get(URI.create("defaultfs:/"), conf);
+ assertSame(defaultFs, fs);
+ fs = FileSystem.get(URI.create("defaultfs:///"), conf);
+ assertSame(defaultFs, fs);
+
+ // has scheme, same auth
+ fs = FileSystem.get(URI.create("defaultfs://host"), conf);
+ assertSame(defaultFs, fs);
+
+ // has scheme, different auth
+ fs = FileSystem.get(URI.create("defaultfs://host2"), conf);
+ assertNotSame(defaultFs, fs);
+
+ // no scheme, no auth
+ fs = FileSystem.get(URI.create("/"), conf);
+ assertSame(defaultFs, fs);
+
+ // no scheme, same auth
+ try {
+ fs = FileSystem.get(URI.create("//host"), conf);
+ fail("got fs with auth but no scheme");
+ } catch (Exception e) {
+ assertEquals("No FileSystem for scheme: null", e.getMessage());
+ }
+
+ // no scheme, different auth
+ try {
+ fs = FileSystem.get(URI.create("//host2"), conf);
+ fail("got fs with auth but no scheme");
+ } catch (Exception e) {
+ assertEquals("No FileSystem for scheme: null", e.getMessage());
+ }
+ }
+
public static class InitializeForeverFileSystem extends LocalFileSystem {
final static Semaphore sem = new Semaphore(0);
public void initialize(URI uri, Configuration conf) throws IOException {