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

Chris Nauroth commented on HADOOP-8973:
---------------------------------------

{quote}
So please make both versions of checkDirs consistent, ideally without code 
duplication.
{quote}

Definitely agreed.  Can we please keep the scope of this jira limited to 
Windows compatibility for the current logic?  Arpit has already filed 
HADOOP-9367 for follow-up on the existing flaws in the code.

{quote}
It seems to me that what checkDir(FS, Path, Perm) is doing is sufficient for 
our use cases.  The code to check permissions via the "implies" functions are 
used in a number of places in the code. What I am trying to understand is why 
the check is sufficient/correct for all those cases and not here. If there is 
an issue in that logic then we have issues in a number of critical places in 
the code which should be fixed. Its more than a question of cross-platform 
compatibility. If there is no issue that logic then its not clear why we need 
to do something different for this particular case.
{quote}

There are 2 broad categories of usage for {{FsAction#implies}}:

# Inside the implementation of the HDFS permission model.  This includes things 
like {{FSDirectory}} and {{FSPermissionChecker}}.  In this case, the logic of 
{{FsAction#implies}} is sufficient, because we know that this is the only kind 
of permission model supported by HDFS.  It doesn't support ACLs (at least not 
yet).
# In various places that need to interact with local disk.  This includes 
things like {{NameNode}} and {{DataNode}} initialization, 
{{ClientDistributedCacheManager}} and {{FSDownload}}.  In these cases, the 
logic of {{FsAction#implies}} is incomplete, because it doesn't cover all 
possible permission checks that might be enforced on the local disk by the host 
OS, such as ACLs.

I believe this is the key distinction: HDFS (full permission model under our 
control) vs. local disk (permission model partially invisible to our code).  
I'm starting to think that instead of {{FsAction#implies}}, we need to write a 
wrapper API that looks more like {{access}} from unistd.h, and route all local 
disk interactions through that instead of {{FsAction#implies}}:

http://linux.die.net/man/2/access

This API just says "tell me if I can read/write/execute this file".  It 
encapsulates the caller from the implementation details of the permission model.

Again though, I think this is far out of scope for the current issue.

{quote}
We need to be careful about the performance impact of how the check is done
{quote}

I believe the lists of directories to check are small in practice: things like 
dfs.namenode.name.dir, dfs.datanode.data.dir, yarn.nodemanager.local-dirs.  
Also, there is no performance regression on Linux, because this logic is 
guarded in an if (WINDOWS) check.  After migration to Java 7, even Windows 
won't need to do this.

                
> DiskChecker cannot reliably detect an inaccessible disk on Windows with NTFS 
> ACLs
> ---------------------------------------------------------------------------------
>
>                 Key: HADOOP-8973
>                 URL: https://issues.apache.org/jira/browse/HADOOP-8973
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: util
>    Affects Versions: trunk-win
>            Reporter: Chris Nauroth
>            Assignee: Chris Nauroth
>         Attachments: HADOOP-8973-branch-trunk-win.2.patch, 
> HADOOP-8973-branch-trunk-win.patch
>
>
> DiskChecker.checkDir uses File.canRead, File.canWrite, and File.canExecute to 
> check if a directory is inaccessible.  These APIs are not reliable on Windows 
> with NTFS ACLs due to a known JVM bug.

--
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