[ 
https://issues.apache.org/jira/browse/HDFS-2071?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kihwal Lee updated HDFS-2071:
-----------------------------

    Attachment: HDFS-2071.patch

> 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

        

Reply via email to