Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ enum LinkType {
* is changed later it is then ignored (a dir with null entries)
*/
static class INodeLink<T> extends INode<T> {
final URI[] targetDirLinkList;
final String[] targetDirLinkList;
private T targetFileSystem; // file system object created from the link.
// Function to initialize file system. Only applicable for simple links
private Function<URI, T> fileSystemInitMethod;
Expand All @@ -240,7 +240,7 @@ static class INodeLink<T> extends INode<T> {
* Construct a mergeLink or nfly.
*/
INodeLink(final String pathToNode, final UserGroupInformation aUgi,
final T targetMergeFs, final URI[] aTargetDirLinkList) {
final T targetMergeFs, final String[] aTargetDirLinkList) {
super(pathToNode, aUgi);
targetFileSystem = targetMergeFs;
targetDirLinkList = aTargetDirLinkList;
Expand All @@ -251,11 +251,11 @@ static class INodeLink<T> extends INode<T> {
*/
INodeLink(final String pathToNode, final UserGroupInformation aUgi,
Function<URI, T> createFileSystemMethod,
final URI aTargetDirLink) {
final String aTargetDirLink) throws URISyntaxException {
super(pathToNode, aUgi);
targetFileSystem = null;
targetDirLinkList = new URI[1];
targetDirLinkList[0] = aTargetDirLink;
targetDirLinkList = new String[1];
targetDirLinkList[0] = new URI(aTargetDirLink).toString();
this.fileSystemInitMethod = createFileSystemMethod;
}

Expand Down Expand Up @@ -293,7 +293,8 @@ public T getTargetFileSystem() throws IOException {
if (targetFileSystem != null) {
return targetFileSystem;
}
targetFileSystem = fileSystemInitMethod.apply(targetDirLinkList[0]);
targetFileSystem =
fileSystemInitMethod.apply(URI.create(targetDirLinkList[0]));
if (targetFileSystem == null) {
throw new IOException(
"Could not initialize target File System for URI : " +
Expand Down Expand Up @@ -361,7 +362,7 @@ private void createLink(final String src, final String target,
switch (linkType) {
case SINGLE:
newLink = new INodeLink<T>(fullPath, aUgi,
initAndGetTargetFs(), new URI(target));
initAndGetTargetFs(), target);
break;
case SINGLE_FALLBACK:
case MERGE_SLASH:
Expand All @@ -370,10 +371,10 @@ private void createLink(final String src, final String target,
throw new IllegalArgumentException("Unexpected linkType: " + linkType);
case MERGE:
case NFLY:
final URI[] targetUris = StringUtils.stringToURI(
StringUtils.getStrings(target));
final String[] targetUris = StringUtils.getStrings(target);
newLink = new INodeLink<T>(fullPath, aUgi,
getTargetFileSystem(settings, targetUris), targetUris);
getTargetFileSystem(settings, StringUtils.stringToURI(targetUris)),
targetUris);
break;
default:
throw new IllegalArgumentException(linkType + ": Infeasible linkType");
Expand Down Expand Up @@ -582,8 +583,7 @@ protected InodeTree(final Configuration config, final String viewName)
if (isMergeSlashConfigured) {
Preconditions.checkNotNull(mergeSlashTarget);
root = new INodeLink<T>(mountTableName, ugi,
initAndGetTargetFs(),
new URI(mergeSlashTarget));
initAndGetTargetFs(), mergeSlashTarget);
mountPoints.add(new MountPoint<T>("/", (INodeLink<T>) root));
rootFallbackLink = null;
} else {
Expand All @@ -600,8 +600,7 @@ protected InodeTree(final Configuration config, final String viewName)
+ "not allowed.");
}
fallbackLink = new INodeLink<T>(mountTableName, ugi,
initAndGetTargetFs(),
new URI(le.getTarget()));
initAndGetTargetFs(), le.getTarget());
} else {
createLink(le.getSrc(), le.getTarget(), le.getLinkType(),
le.getSettings(), le.getUgi(), le.getConfig());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,16 +172,25 @@ static public class MountPoint {
* One or more targets of the mount.
* Multiple targets imply MergeMount.
*/
private URI[] targets;
private String[] targets;

MountPoint(Path srcPath, URI[] targetURIs) {
MountPoint(Path srcPath, String[] targetURIs) {
src = srcPath;
targets = targetURIs;
}
Path getSrc() {
return src;
}

URI[] getTargets() {
URI[] targetUris = new URI[targets.length];
for (int i = 0; i < targets.length; i++) {
targetUris[i] = URI.create(targets[i]);
}
return targetUris;
}

public String[] getTargetFileSystemPaths() {
return targets;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,16 +178,18 @@ static AccessControlException readOnlyMountTable(final String operation,


static public class MountPoint {
private Path src; // the src of the mount
private URI[] targets; // target of the mount; Multiple targets imply mergeMount
MountPoint(Path srcPath, URI[] targetURIs) {
// the src of the mount
private Path src;
// Target of the mount; Multiple targets imply mergeMount
private String[] targets;
MountPoint(Path srcPath, String[] targetURIs) {
src = srcPath;
targets = targetURIs;
}
Path getSrc() {
return src;
}
URI[] getTargets() {
String[] getTargets() {
return targets;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1392,4 +1392,22 @@ public void testTargetFileSystemLazyInitializationForChecksumMethods()
// viewfs inner cache is disabled
assertEquals(cacheSize + 1, TestFileUtil.getCacheSize());
}

@Test
public void testInvalidMountPoints() throws Exception {
final String clusterName = "cluster" + new Random().nextInt();
Configuration config = new Configuration(conf);
config.set(ConfigUtil.getConfigViewFsPrefix(clusterName) + "." +
Constants.CONFIG_VIEWFS_LINK + "." + "/invalidPath",
"othermockfs:|mockauth/mockpath");

try {
FileSystem viewFs = FileSystem.get(
new URI("viewfs://" + clusterName + "/"), config);
fail("FileSystem should not initialize. Should fail with IOException");
} catch (IOException ex) {
assertTrue("Should get URISyntax Exception",
ex.getMessage().startsWith("URISyntax exception"));
}
}
}