HADOOP-8606. FileSystem.get may return the wrong filesystem (Daryn Sharp via bobby)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1365224 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3ef19e9dbd
commit
a2d5603106
|
@ -838,6 +838,9 @@ Release 0.23.3 - UNRELEASED
|
||||||
HADOOP-8599. Non empty response from FileSystem.getFileBlockLocations when
|
HADOOP-8599. Non empty response from FileSystem.getFileBlockLocations when
|
||||||
asking for data beyond the end of file. (Andrey Klochkov via todd)
|
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
|
Release 0.23.2 - UNRELEASED
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -280,11 +280,11 @@ public abstract class FileSystem extends Configured implements Closeable {
|
||||||
String scheme = uri.getScheme();
|
String scheme = uri.getScheme();
|
||||||
String authority = uri.getAuthority();
|
String authority = uri.getAuthority();
|
||||||
|
|
||||||
if (scheme == null) { // no scheme: use default FS
|
if (scheme == null && authority == null) { // use default FS
|
||||||
return get(conf);
|
return get(conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (authority == null) { // no authority
|
if (scheme != null && authority == null) { // no authority
|
||||||
URI defaultUri = getDefaultUri(conf);
|
URI defaultUri = getDefaultUri(conf);
|
||||||
if (scheme.equals(defaultUri.getScheme()) // if scheme matches default
|
if (scheme.equals(defaultUri.getScheme()) // if scheme matches default
|
||||||
&& defaultUri.getAuthority() != null) { // & default has authority
|
&& defaultUri.getAuthority() != null) { // & default has authority
|
||||||
|
|
|
@ -34,8 +34,8 @@ import org.junit.Test;
|
||||||
import java.security.PrivilegedExceptionAction;
|
import java.security.PrivilegedExceptionAction;
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static junit.framework.Assert.assertTrue;
|
|
||||||
|
|
||||||
|
|
||||||
public class TestFileSystemCaching {
|
public class TestFileSystemCaching {
|
||||||
|
@ -49,6 +49,65 @@ public class TestFileSystemCaching {
|
||||||
assertSame(fs1, fs2);
|
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 {
|
public static class InitializeForeverFileSystem extends LocalFileSystem {
|
||||||
final static Semaphore sem = new Semaphore(0);
|
final static Semaphore sem = new Semaphore(0);
|
||||||
public void initialize(URI uri, Configuration conf) throws IOException {
|
public void initialize(URI uri, Configuration conf) throws IOException {
|
||||||
|
|
Loading…
Reference in New Issue