[ 
https://issues.apache.org/jira/browse/HADOOP-9043?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13583336#comment-13583336
 ] 

Chris Nauroth commented on HADOOP-9043:
---------------------------------------

{quote}
To fix this specific problem, we would want to change FileUtil#symlink to 
"normalize the slashes". If you take a look at the branch-1-win code, it 
already does this so you can just forward port the patch.
{quote}

This code was already ported to branch-trunk-win several months ago:

{code}
  public static int symLink(String target, String linkname) throws IOException{
    // Run the input paths through Java's File so that they are converted to the
    // native OS form
    File targetFile = new File(target);
    File linkFile = new File(linkname);
{code}

I believe this jira is no longer valid, at least under its current description. 
 When I filed it, I didn't realize that Windows requires slightly different API 
calls for creating a symlink that targets a directory vs. a file.  Therefore, 
winutils really does need to call {{DirectoryCheck}} to determine the type of 
target.  As a consequence, winutils differs from Unix ln in that it cannot 
create a dangling symlink.  (It has no way of knowing whether the caller is 
trying to create a "dangling file symlink" or a "dangling directory symlink".)  
I believe that both the Java code and the C code are doing the right thing for 
us now, without further changes.

The remaining issue is the failure of {{TestLocalFSFileContextSymlink}} on 
Windows, which is what prompted me to file this jira initially.  We now know 
that this is an inevitable platform difference, so let's use 
{{Assert.assumeTrue(!Shell.WINDOWS)}} to skip the tests that can't possibly 
pass on Windows.  If needed, we could also add more tests to cover Windows 
behavior, guarded with {{Assert.assumeTrue(Shell.WINDOWS)}}.  AFAIK, Hadoop 
product code does not actually require the ability to create a dangling 
symlink, and the test suite is just trying to cover ln functionality 
exhaustively.

I propose that we close this jira as invalid and create a new one to fix the 
tests.

                
> winutils can create unusable symlinks
> -------------------------------------
>
>                 Key: HADOOP-9043
>                 URL: https://issues.apache.org/jira/browse/HADOOP-9043
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: util
>    Affects Versions: 1-win, trunk-win
>            Reporter: Chris Nauroth
>            Assignee: Arpit Agarwal
>         Attachments: HADOOP-9043.branch-1-win.patch, HADOOP-9043.trunk.patch
>
>
> In general, the winutils symlink command rejects attempts to create symlinks 
> targeting a destination file that does not exist.  However, if given a 
> symlink destination with forward slashes pointing at a file that does exist, 
> then it creates the symlink with the forward slashes, and then attempts to 
> open the file through the symlink will fail.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to