[ 
https://issues.apache.org/jira/browse/HDFS-2054?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13047404#comment-13047404
 ] 

Kihwal Lee commented on HDFS-2054:
----------------------------------


@Todd: (b) may not work either. TransferTo() accesses fd directly and nothing 
sets the class private variables for indicating the connection status in 
objects that uses it (e.g. Socket). SocketChannel.write() will also cause EPIPE 
and an ioe at this point. Only after close() method is explicitly called, the 
private variables are set and subsequently the open/close check methods will 
work as expected. Reading may work if the read buffer is not empty even after a 
write got EPIPE. So testing the connection with read is not reliable either. 
o.a.h.net.SocketOutputStream.write() used in other portions of sendChunks() 
does catch IOException and close the stream. That's the source of the isOpen() 
inconsistency I reported above.

The NIO could check for EPIPE and make an AsynchronousCloseException thrown in 
FileChannel. Otherwise it is very hard to handle different types of exceptions 
in different ways. For SocketChannel, most Java code assumes IOException means 
connection closure. The same assumption cannot be made in FileChannel (e.g. 
HDFS-1527).

Short of the support from NIO, (a) seems to be the only option. We could do 
this in o.a.h.net.SocketOutputStream.transferToFully(), but the hadoop-common 
class might be used by others and connection closure be handled by catching 
IOException.  So the safest thing we can do at this point is adding (a) to 
BlockSender.



> BlockSender.sendChunk() prints ERROR for connection closures encountered  
> during transferToFully()
> --------------------------------------------------------------------------------------------------
>
>                 Key: HDFS-2054
>                 URL: https://issues.apache.org/jira/browse/HDFS-2054
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>          Components: data-node
>    Affects Versions: 0.22.0, 0.23.0
>            Reporter: Kihwal Lee
>            Assignee: Kihwal Lee
>            Priority: Minor
>         Attachments: HDFS-2054.patch
>
>
> The addition of ERROR was part of HDFS-1527. In environments where clients 
> tear down FSInputStream/connection before reaching the end of stream, this 
> error message often pops up. Since these are not really errors and especially 
> not the fault of data node, the message should be toned down at least. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to