HDFS-3555. idle client socket triggers DN ERROR log (should be INFO or DEBUG). Contributed by Andy Isaacson. (harsh)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1359619 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Harsh J 2012-07-10 11:52:13 +00:00
parent 11782dd3a5
commit e0f96aa249
2 changed files with 25 additions and 12 deletions

View File

@ -287,6 +287,9 @@ Branch-2 ( Unreleased changes )
HDFS-3067. NPE in DFSInputStream.readBuffer if read is repeated on HDFS-3067. NPE in DFSInputStream.readBuffer if read is repeated on
corrupted block. (Henry Robinson via atm) corrupted block. (Henry Robinson via atm)
HDFS-3555. idle client socket triggers DN ERROR log
(should be INFO or DEBUG). (Andy Isaacson via harsh)
OPTIMIZATIONS OPTIMIZATIONS
HDFS-2982. Startup performance suffers when there are many edit log HDFS-2982. Startup performance suffers when there are many edit log

View File

@ -28,6 +28,7 @@
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.SocketException; import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;
import java.util.Arrays; import java.util.Arrays;
@ -493,18 +494,27 @@ private int sendPacket(ByteBuffer pkt, int maxChunks, OutputStream out,
out.write(buf, 0, dataOff + dataLen); out.write(buf, 0, dataOff + dataLen);
} }
} catch (IOException e) { } catch (IOException e) {
/* Exception while writing to the client. Connection closure from if (e instanceof SocketTimeoutException) {
* the other end is mostly the case and we do not care much about /*
* it. But other things can go wrong, especially in transferTo(), * writing to client timed out. This happens if the client reads
* which we do not want to ignore. * part of a block and then decides not to read the rest (but leaves
* * the socket open).
* The message parsing below should not be considered as a good */
* coding example. NEVER do it to drive a program logic. NEVER. LOG.info("BlockSender.sendChunks() exception: ", e);
* It was done here because the NIO throws an IOException for EPIPE. } else {
*/ /* Exception while writing to the client. Connection closure from
String ioem = e.getMessage(); * the other end is mostly the case and we do not care much about
if (!ioem.startsWith("Broken pipe") && !ioem.startsWith("Connection reset")) { * it. But other things can go wrong, especially in transferTo(),
LOG.error("BlockSender.sendChunks() exception: ", e); * which we do not want to ignore.
*
* The message parsing below should not be considered as a good
* coding example. NEVER do it to drive a program logic. NEVER.
* It was done here because the NIO throws an IOException for EPIPE.
*/
String ioem = e.getMessage();
if (!ioem.startsWith("Broken pipe") && !ioem.startsWith("Connection reset")) {
LOG.error("BlockSender.sendChunks() exception: ", e);
}
} }
throw ioeToSocketException(e); throw ioeToSocketException(e);
} }