Author: umamahesh Date: Tue Dec 31 16:26:48 2013 New Revision: 1554556 URL: http://svn.apache.org/r1554556 Log: Merge. HDFS-5671. Fix socket leak in DFSInputStream#getBlockReader. Contributed by JamesLi
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1554556&r1=1554555&r2=1554556&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Tue Dec 31 16:26:48 2013 @@ -438,6 +438,8 @@ Release 2.3.0 - UNRELEASED HDFS-5582. hdfs getconf -excludeFile or -includeFile always failed (sathish via cmccabe) + HDFS-5671. Fix socket leak in DFSInputStream#getBlockReader. (JamesLi via umamahesh) + Release 2.2.0 - 2013-10-13 INCOMPATIBLE CHANGES Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java?rev=1554556&r1=1554555&r2=1554556&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java Tue Dec 31 16:26:48 2013 @@ -1188,11 +1188,21 @@ implements ByteBufferReadable, CanSetDro } // Try to create a new remote peer. Peer peer = newTcpPeer(dnAddr); - return BlockReaderFactory.newBlockReader( - dfsClient.getConf(), file, block, blockToken, startOffset, - len, verifyChecksum, clientName, peer, chosenNode, - dsFactory, peerCache, fileInputStreamCache, false, + try { + reader = BlockReaderFactory.newBlockReader(dfsClient.getConf(), file, + block, blockToken, startOffset, len, verifyChecksum, clientName, + peer, chosenNode, dsFactory, peerCache, fileInputStreamCache, false, curCachingStrategy); + return reader; + } catch (IOException ex) { + DFSClient.LOG.debug( + "Exception while getting block reader, closing stale " + peer, ex); + throw ex; + } finally { + if (reader == null) { + IOUtils.closeQuietly(peer); + } + } }