tez-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jonathan Eagles (JIRA)" <j...@apache.org>
Subject [jira] [Created] (TEZ-3993) Tez fails to parse windows file paths in local mode
Date Thu, 20 Sep 2018 20:17:00 GMT
Jonathan Eagles created TEZ-3993:
------------------------------------

             Summary: Tez fails to parse windows file paths in local mode
                 Key: TEZ-3993
                 URL: https://issues.apache.org/jira/browse/TEZ-3993
             Project: Apache Tez
          Issue Type: Bug
            Reporter: Jonathan Eagles
            Assignee: Jonathan Eagles


TezLocalCacheManager tries to generate symlinks to files that it puts in the local cache,
but the code that it uses to construct the path names is not safe on Windows and causes bad
file names to be constructed when run in a Windows environment. On Windows, a path like file:/c:/path/to/my/file
should be legal and transform to c:\path\to\my\file, but with the invalid construct, it turns
into the illegal value /c:/path/to/my/file instead.

In TezLocalCacheManager, there is code that does

{code}
private boolean createSymlink(Path target, Path link) throws IOException {
    LOG.info("Creating symlink: {} <- {}", target, link);
    String targetPath = target.toUri().getPath();
    String linkPath = link.toUri().getPath();
{code}

It looks like there are several other places in the Tez code that also use the Path.toUri().getPath()
construct that probably also need to be fixed in order to work correctly on Windows.

The construct Path.toUri().getPath() doesn't handle windows directories correctly. The Java
File class understands how to do this correctly, so this should really be replaced by

{code}
private boolean createSymlink(Path target, Path link) throws IOException {
    LOG.info("Creating symlink: {} <- {}", target, link);
    String targetPath = new File(target.toUri()).getCanonicalPath();
    String linkPath = new File(link.toUri()).getCanonicalPath();
{code}
{code}
2018-09-19T16:32:53,287 ERROR [LocalContainerLauncher-SubTaskRunner] org.apache.tez.dag.app.launcher.LocalContainerLauncher
- TezSubTaskRunner failed due to exception
java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/...fullpath
        at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
        at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
        at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
        at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
        at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
        at java.nio.file.Paths.get(Paths.java:84)
        at org.apache.tez.dag.app.launcher.TezLocalCacheManager.createSymlink(TezLocalCacheManager.java:173)
        at org.apache.tez.dag.app.launcher.TezLocalCacheManager.localize(TezLocalCacheManager.java:126)
        at org.apache.tez.dag.app.launcher.LocalContainerLauncher.launch(LocalContainerLauncher.java:263)
        at org.apache.tez.dag.app.launcher.LocalContainerLauncher.access$300(LocalContainerLauncher.java:82)
        at org.apache.tez.dag.app.launcher.LocalContainerLauncher$TezSubTaskRunner.run(LocalContainerLauncher.java:207)
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message