Author: bobby
Date: Tue Jul 24 19:04:25 2012
New Revision: 1365229
URL: http://svn.apache.org/viewvc?rev=1365229&view=rev
Log:
HADOOP-8606. FileSystem.get may return the wrong filesystem (Daryn Sharp via
bobby)
Modified:
hadoop/common/branches/branch-1/CHANGES.txt
hadoop/common/branches/branch-1/src/core/org/apache/hadoop/fs/FileSystem.java
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/fs/TestFileSystemCaching.java
Modified: hadoop/common/branches/branch-1/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/CHANGES.txt?rev=1365229&r1=1365228&r2=1365229&view=diff
==============================================================================
--- hadoop/common/branches/branch-1/CHANGES.txt (original)
+++ hadoop/common/branches/branch-1/CHANGES.txt Tue Jul 24 19:04:25 2012
@@ -107,6 +107,9 @@ Release 1.2.0 - unreleased
HADOOP-8612. Backport HADOOP-8599 to branch-1 (Non empty response
when read beyond eof). (Andrey Klochkov, eli via eli)
+ HADOOP-8606. FileSystem.get may return the wrong filesystem (Daryn Sharp
+ via bobby)
+
Release 1.1.0 - unreleased
INCOMPATIBLE CHANGES
Modified:
hadoop/common/branches/branch-1/src/core/org/apache/hadoop/fs/FileSystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/core/org/apache/hadoop/fs/FileSystem.java?rev=1365229&r1=1365228&r2=1365229&view=diff
==============================================================================
---
hadoop/common/branches/branch-1/src/core/org/apache/hadoop/fs/FileSystem.java
(original)
+++
hadoop/common/branches/branch-1/src/core/org/apache/hadoop/fs/FileSystem.java
Tue Jul 24 19:04:25 2012
@@ -234,11 +234,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-1/src/test/org/apache/hadoop/fs/TestFileSystemCaching.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/test/org/apache/hadoop/fs/TestFileSystemCaching.java?rev=1365229&r1=1365228&r2=1365229&view=diff
==============================================================================
---
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/fs/TestFileSystemCaching.java
(original)
+++
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/fs/TestFileSystemCaching.java
Tue Jul 24 19:04:25 2012
@@ -29,6 +29,64 @@ import junit.framework.TestCase;
public class TestFileSystemCaching extends TestCase {
+ static class DefaultFs extends LocalFileSystem {
+ URI uri;
+ @Override
+ public void initialize(URI uri, Configuration conf) {
+ this.uri = uri;
+ }
+ @Override
+ public URI getUri() {
+ return uri;
+ }
+ }
+
+ 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 {