You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2023/04/03 11:31:00 UTC

[jira] [Work logged] (HIVE-27135) AcidUtils#getHdfsDirSnapshots() throws FNFE when a directory is removed in HDFS

     [ https://issues.apache.org/jira/browse/HIVE-27135?focusedWorklogId=854505&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-854505 ]

ASF GitHub Bot logged work on HIVE-27135:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 03/Apr/23 11:30
            Start Date: 03/Apr/23 11:30
    Worklog Time Spent: 10m 
      Work Description: sonarcloud[bot] commented on PR #4114:
URL: https://github.com/apache/hive/pull/4114#issuecomment-1494153045

   Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=apache_hive&pullRequest=4114)
   
   [![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=apache_hive&pullRequest=4114&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=apache_hive&pullRequest=4114&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=apache_hive&pullRequest=4114&resolved=false&types=BUG)  
   [![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=apache_hive&pullRequest=4114&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=apache_hive&pullRequest=4114&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=apache_hive&pullRequest=4114&resolved=false&types=VULNERABILITY)  
   [![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=apache_hive&pullRequest=4114&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=apache_hive&pullRequest=4114&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache_hive&pullRequest=4114&resolved=false&types=SECURITY_HOTSPOT)  
   [![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=apache_hive&pullRequest=4114&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=apache_hive&pullRequest=4114&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=apache_hive&pullRequest=4114&resolved=false&types=CODE_SMELL)
   
   [![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=apache_hive&pullRequest=4114&metric=coverage&view=list) No Coverage information  
   [![No Duplication information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/NoDuplicationInfo-16px.png 'No Duplication information')](https://sonarcloud.io/component_measures?id=apache_hive&pullRequest=4114&metric=duplicated_lines_density&view=list) No Duplication information
   
   




Issue Time Tracking
-------------------

    Worklog Id:     (was: 854505)
    Time Spent: 7h 10m  (was: 7h)

> AcidUtils#getHdfsDirSnapshots() throws FNFE when a directory is removed in HDFS
> -------------------------------------------------------------------------------
>
>                 Key: HIVE-27135
>                 URL: https://issues.apache.org/jira/browse/HIVE-27135
>             Project: Hive
>          Issue Type: Bug
>            Reporter: Dayakar M
>            Assignee: Dayakar M
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 7h 10m
>  Remaining Estimate: 0h
>
> AcidUtils#getHdfsDirSnapshots() throws FileNotFoundException when a directory is removed in HDFS while fetching HDFS Snapshots.
> Below testcode can be used to reproduce this issue.
> {code:java}
>  @Test
>   public void testShouldNotThrowFNFEWhenHiveStagingDirectoryIsRemovedWhileFetchingHDFSSnapshots() throws Exception {
>     MockFileSystem fs = new MockFileSystem(new HiveConf(),
>         new MockFile("mock:/tbl/part1/.hive-staging_dir/-ext-10002", 500, new byte[0]),
>         new MockFile("mock:/tbl/part2/.hive-staging_dir", 500, new byte[0]),
>         new MockFile("mock:/tbl/part1/_tmp_space.db", 500, new byte[0]),
>         new MockFile("mock:/tbl/part1/delta_1_1/bucket-0000-0000", 500, new byte[0]));
>     Path path = new MockPath(fs, "/tbl");
>     Path stageDir = new MockPath(fs, "mock:/tbl/part1/.hive-staging_dir");
>     FileSystem mockFs = spy(fs);
>     Mockito.doThrow(new FileNotFoundException("")).when(mockFs).listLocatedStatus(eq(stageDir));
>     try {
>       Map<Path, AcidUtils.HdfsDirSnapshot> hdfsDirSnapshots = AcidUtils.getHdfsDirSnapshots(mockFs, path);
>       Assert.assertEquals(1, hdfsDirSnapshots.size());
>     }
>     catch (FileNotFoundException fnf) {
>       fail("Should not throw FileNotFoundException when a directory is removed while fetching HDFSSnapshots");
>     }
>   }{code}
> This issue got fixed as a part of HIVE-26481 but here its not fixed completely. [Here|https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java#L1541] FileUtils.listFiles() API which returns a RemoteIterator<LocatedFileStatus>. So while iterating over, it checks if it is a directory and recursive listing then it will try to list files from that directory but if that directory is removed by other thread/task then it throws FileNotFoundException. Here the directory which got removed is the .staging directory which needs to be excluded through by using passed filter.
>  
> So here we can use same logic written in _org.apache.hadoop.hive.ql.io.AcidUtils#getHdfsDirSnapshotsForCleaner()_ API to avoid FileNotFoundException.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)