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

ASF GitHub Bot commented on DRILL-4990:
---------------------------------------

Github user sohami commented on a diff in the pull request:

    https://github.com/apache/drill/pull/652#discussion_r88072130
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/WorkspaceSchemaFactory.java
 ---
    @@ -151,15 +152,11 @@ public WorkspaceSchemaFactory(
       public boolean accessible(final String userName) throws IOException {
         final FileSystem fs = ImpersonationUtil.createFileSystem(userName, 
fsConf);
         try {
    -      // We have to rely on the listStatus as a FileSystem can have 
complicated controls such as regular unix style
    -      // permissions, Access Control Lists (ACLs) or Access Control 
Expressions (ACE). Hadoop 2.7 version of FileSystem
    -      // has a limited private API (FileSystem.access) to check the 
permissions directly
    -      // (see https://issues.apache.org/jira/browse/HDFS-6570). Drill 
currently relies on Hadoop 2.5.0 version of
    -      // FileClient. TODO: Update this when DRILL-3749 is fixed.
    -      fs.listStatus(wsPath);
    +      fs.access(wsPath, FsAction.READ);
         } catch (final UnsupportedOperationException e) {
    -      logger.trace("The filesystem for this workspace does not support 
this operation.", e);
    +      logger.debug("The filesystem for this workspace does not support 
this operation.", e);
    --- End diff --
    
    We should return false in this case as well. Better to have a local boolean 
variable (like boolean isAccessAllowed;) and set it accordingly in try and 
catch. Then have just 1 return statement in the end.


> Use new HDFS API access instead of listStatus to check if users have 
> permissions to access workspace.
> -----------------------------------------------------------------------------------------------------
>
>                 Key: DRILL-4990
>                 URL: https://issues.apache.org/jira/browse/DRILL-4990
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Query Planning & Optimization
>    Affects Versions: 1.8.0
>            Reporter: Padma Penumarthy
>            Assignee: Sorabh Hamirwasia
>             Fix For: 1.9.0
>
>
> For every query, we build the schema tree 
> (runSQL->getPlan->getNewDefaultSchema->getRootSchema). All workspaces in all 
> storage plugins are checked and are added to the schema tree if they are 
> accessible by the user who initiated the query.  For file system plugin, 
> listStatus API is used to check if  the workspace is accessible or not 
> (WorkspaceSchemaFactory.accessible) by the user.  The idea seem to be if the 
> user does not have access to file(s) in the workspace, listStatus will 
> generate an exception and we return false. But, listStatus (which lists all 
> the entries of a directory) is an expensive operation when there are large 
> number of files in the directory. A new API is added in Hadoop 2.6 called 
> access (HDFS-6570) which provides the ability to check if the user has 
> permissions on a file/directory.  Use this new API instead of listStatus. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to