[
https://issues.apache.org/jira/browse/HDFS-2071?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kihwal Lee updated HDFS-2071:
-----------------------------
Fix Version/s: 0.20.3
Status: Patch Available (was: Open)
> 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.20.3
>
> 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