Browse Source

HDFS-6238. TestDirectoryScanner leaks file descriptors. Contributed by Chris Nauroth.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1587148 13f79535-47bb-0310-9956-ffa450edef68
Chris Nauroth 11 years ago
parent
commit
8a9eff3919

+ 2 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -341,6 +341,8 @@ Release 2.5.0 - UNRELEASED
     HDFS-6237. TestDFSShell#testGet fails on Windows due to invalid file system
     path. (cnauroth)
 
+    HDFS-6238. TestDirectoryScanner leaks file descriptors. (cnauroth)
+
 Release 2.4.1 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 12 - 5
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDirectoryScanner.java

@@ -46,6 +46,7 @@ import org.apache.hadoop.hdfs.server.common.GenerationStamp;
 import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsDatasetSpi;
 import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeSpi;
 import org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetTestUtil;
+import org.apache.hadoop.io.IOUtils;
 import org.junit.Test;
 
 /**
@@ -85,11 +86,17 @@ public class TestDirectoryScanner {
         File mf = b.getMetaFile();
         // Truncate a block file that has a corresponding metadata file
         if (f.exists() && f.length() != 0 && mf.exists()) {
-          FileOutputStream s = new FileOutputStream(f);
-          FileChannel channel = s.getChannel();
-          channel.truncate(0);
-          LOG.info("Truncated block file " + f.getAbsolutePath());
-          return b.getBlockId();
+          FileOutputStream s = null;
+          FileChannel channel = null;
+          try {
+            s = new FileOutputStream(f);
+            channel = s.getChannel();
+            channel.truncate(0);
+            LOG.info("Truncated block file " + f.getAbsolutePath());
+            return b.getBlockId();
+          } finally {
+            IOUtils.cleanup(LOG, channel, s);
+          }
         }
       }
     }