[ 
https://issues.apache.org/jira/browse/IMPALA-10266?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Riza Suminto reassigned IMPALA-10266:
-------------------------------------

    Assignee: Riza Suminto

> Replace instanceof *FileSystem with FS scheme checks
> ----------------------------------------------------
>
>                 Key: IMPALA-10266
>                 URL: https://issues.apache.org/jira/browse/IMPALA-10266
>             Project: IMPALA
>          Issue Type: Improvement
>          Components: Frontend
>            Reporter: Tim Armstrong
>            Assignee: Riza Suminto
>            Priority: Major
>              Labels: newbie, ramp-up
>
> In the Impala code we have checks in various places about which filesystem 
> implementation we are using. E.g in the frontend, many of these checks are 
> here - 
> https://github.com/apache/impala/blob/master/fe/src/main/java/org/apache/impala/common/FileSystemUtil.java.
> In the frontend, some of these checks are done using the instanceof operator 
> with subclasses of  org.apache.hadoop.fs.FileSystem. E.g.
> {code}
>   public static boolean supportsStorageIds(FileSystem fs) {
>     // Common case.
>     if (isDistributedFileSystem(fs)) return true;
>     // Blacklist FileSystems that are known to not to include storage UUIDs.
>     return !(fs instanceof S3AFileSystem || fs instanceof LocalFileSystem ||
>         fs instanceof AzureBlobFileSystem || fs instanceof 
> SecureAzureBlobFileSystem ||
>         fs instanceof AdlFileSystem);
>   }
> {code}
> We also identify filesystem based on the scheme, e.g. s3a in a URL like 
> s3a://path/
> {code}
>     private static final Map<String, FsType> SCHEME_TO_FS_MAPPING =
>         ImmutableMap.<String, FsType>builder()
>             .put("abfs", ADLS)
>             .put("abfss", ADLS)
>             .put("adl", ADLS)
>             .put("file", LOCAL)
>             .put("hdfs", HDFS)
>             .put("s3a", S3)
>             .put("o3fs", OZONE)
>             .put("alluxio", ALLUXIO)
>             .build();
> {code}
> The proposal is to replace all instanceof use with checks based on the 
> scheme, which we can get from the FileSystem - 
> https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/fs/FileSystem.html#getScheme--
> Checking the java class and the scheme are not exactly equivalent because 
> there are some cases where a new scheme is handled by a known class (or 
> subclass of that class) - that's what happened with Alluxio with IMPALA-10087 
> where we accidentally supported it for a bit until we broke it. But since 
> IMPALA-6050 we need to check both the scheme and the class, so it would be 
> better at this point to just standardise on the scheme AFAICT.
> In future we could conceivably then remove some of this hardcoded logic and 
> consolidate the information about filesystem capabilities into one place.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to