[ https://issues.apache.org/jira/browse/HDFS-2071?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13050116#comment-13050116 ]
Hudson commented on HDFS-2071: ------------------------------ Integrated in Hadoop-Hdfs-trunk-Commit #746 (See [https://builds.apache.org/job/Hadoop-Hdfs-trunk-Commit/746/]) > Use of isConnected() in DataXceiver is invalid > ---------------------------------------------- > > Key: HDFS-2071 > URL: https://issues.apache.org/jira/browse/HDFS-2071 > Project: Hadoop HDFS > Issue Type: Bug > Components: data-node > Affects Versions: 0.23.0 > Reporter: Kihwal Lee > Assignee: Kihwal Lee > Priority: Minor > Fix For: 0.22.0 > > Attachments: HDFS-2071.patch > > > The use of Socket.isConnected() in DataXceiver.run() is not valid. It returns > false until the connection is made and then always returns true after that. > It will never return false after the initial connection is successfully made. > Socket.isClosed() or SocketChannel.isOpen() should be used instead, assuming > someone is handling SocketException and does Socket.close() or > SocketChannel.close(). It seems the op handlers in DataXceiver are diligently > using IOUtils.closeStream(), which will invoke SocketChannel.close(). > {code} > - } while (s.isConnected() && socketKeepaliveTimeout > 0); > + } while (!s.isClosed() && socketKeepaliveTimeout > 0); > {code} > The effect of this bug is very minor, as the socket is read again right > after. If the connection was closed, the readOp() will throw an EOFException, > which is caught and dealt with properly. The system still functions normally > with probably only few microseconds of extra overhead in the premature > connection closure cases. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira