[ https://issues.apache.org/jira/browse/HDFS-10383?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15284143#comment-15284143 ]
Walter Su commented on HDFS-10383: ---------------------------------- bq. IOUtils#cleanup swallows it in the finally block. Great work! And good analysis about {{createStripedFile()}}. We already have {{createStripedFile()}} before {{DFSStripedSteam}} is implemented. The test still prints a warning stacktrace because of secondary {{completeFile()}}. So I think, which is not related to this, how about changing it together {code} - out = dfs.create(file, (short) 1); // create an empty file + cluster.getNameNodeRpc() + .create(file.toString(), new FsPermission((short)0755), + dfs.getClient().getClientName(), + new EnumSetWritable<>(EnumSet.of(CreateFlag.CREATE)), + false, (short)1, 128*1024*1024L, null); {code} > Safely close resources in DFSTestUtil > ------------------------------------- > > Key: HDFS-10383 > URL: https://issues.apache.org/jira/browse/HDFS-10383 > Project: Hadoop HDFS > Issue Type: Improvement > Components: test > Reporter: Mingliang Liu > Assignee: Mingliang Liu > Attachments: HDFS-10383.000.patch, HDFS-10383.001.patch, > HDFS-10383.002.patch > > > There are a few of methods in {{DFSTestUtil}} that do not close the resource > safely, or elegantly. We can use the try-with-resource statement to address > this problem. > Specially, as {{DFSTestUtil}} is popularly used in test, we need to preserve > any exceptions thrown during the processing of the resource while still > guaranteeing it's closed finally. Take for example,the current implementation > of {{DFSTestUtil#createFile()}} closes the FSDataOutputStream in the > {{finally}} block, and when closing if the internal > {{DFSOutputStream#close()}} throws any exception, which it often does, the > exception thrown during the processing will be lost. See this [test > failure|https://builds.apache.org/job/PreCommit-HADOOP-Build/9320/testReport/org.apache.hadoop.hdfs/TestAsyncDFSRename/testAggressiveConcurrentAsyncRenameWithOverwrite/], > and we have to guess what was the root cause. > Using try-with-resource, we can close the resources safely, and the > exceptions thrown both in processing and closing will be available (closing > exception will be suppressed). -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org