Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/1032#discussion_r150685414
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/WorkspaceSchemaFactory.java
 ---
    @@ -150,14 +152,30 @@ public WorkspaceSchemaFactory(
        * @return True if the user has access. False otherwise.
        */
       public boolean accessible(final String userName) throws IOException {
    -    final FileSystem fs = ImpersonationUtil.createFileSystem(userName, 
fsConf);
    +    final DrillFileSystem fs = 
ImpersonationUtil.createFileSystem(userName, fsConf);
    +    return accessible(fs);
    +  }
    +
    +  /**
    +   * Checks whether a FileSystem object has the permission to list/read 
workspace directory
    +   * @param fs a DrillFileSystem object that was created with certain user 
privilege
    +   * @return True if the user has access. False otherwise.
    +   * @throws IOException
    +   */
    +  public boolean accessible(DrillFileSystem fs) throws IOException {
         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);
    +      /**
    +       * For Windows local file system, fs.access ends up using 
DeprecatedRawLocalFileStatus which has
    +       * TrustedInstaller as owner, and a member of Administrators group 
could not satisfy the permission.
    +       * In this case, we will still use method listStatus.
    +       * In other cases, we use access method since it is cheaper.
    +       */
    +      if (SystemUtils.IS_OS_WINDOWS && 
fs.getUri().getScheme().equalsIgnoreCase("file")) {
    --- End diff --
    
    HDFS probably defines a constant for "file". Should we reference that?


---

Reply via email to