You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-issues@hadoop.apache.org by "MaoYuan Xian (JIRA)" <ji...@apache.org> on 2014/01/09 08:33:55 UTC

[jira] [Created] (HADOOP-10216) Unnecessary disk check triggered when socket operation has problem.

MaoYuan Xian created HADOOP-10216:
-------------------------------------

             Summary: Unnecessary disk check triggered when socket operation has problem.
                 Key: HADOOP-10216
                 URL: https://issues.apache.org/jira/browse/HADOOP-10216
             Project: Hadoop Common
          Issue Type: Improvement
          Components: fs
    Affects Versions: 1.1.2
            Reporter: MaoYuan Xian


When BlockReceiver transfer data fails, it can be found SocketOutputStream translates the exception as IOException with the message "The stream is closed":
2014-01-06 11:48:04,716 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: IOException in BlockReceiver.run():
java.io.IOException: The stream is closed
        at org.apache.hadoop.net.SocketOutputStream.write
        at java.io.BufferedOutputStream.flushBuffer
        at java.io.BufferedOutputStream.flush
        at java.io.DataOutputStream.flush
        at org.apache.hadoop.hdfs.server.datanode.BlockReceiver$PacketResponder.run
        at java.lang.Thread.run

Which makes the checkDiskError method of DataNode called and triggers the disk scan.

Can we make the modifications like below in checkDiskError to avoiding this unneccessary disk scan operations?:

{code}
--- a/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java
+++ b/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java
@@ -938,7 +938,8 @@ public class DataNode extends Configured
          || e.getMessage().startsWith("An established connection was aborted")
          || e.getMessage().startsWith("Broken pipe")
          || e.getMessage().startsWith("Connection reset")
-         || e.getMessage().contains("java.nio.channels.SocketChannel")) {
+         || e.getMessage().contains("java.nio.channels.SocketChannel")
+         || e.getMessage().startsWith("The stream is closed")) {
       LOG.info("Not checking disk as checkDiskError was called on a network" +
         " related exception"); 
       return;
{code}



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)