HDFS-3342. SocketTimeoutException in BlockSender.sendChunks could have a better error message. Contributed by Yongjun Zhang.
This commit is contained in:
parent
a3dacc07e2
commit
c2866ac34d
|
@ -319,6 +319,9 @@ Release 2.7.0 - UNRELEASED
|
|||
|
||||
HDFS-7280. Use netty 4 in WebImageViewer. (wheat9)
|
||||
|
||||
HDFS-3342. SocketTimeoutException in BlockSender.sendChunks could
|
||||
have a better error message. (Yongjun Zhang via wang)
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
|
|
@ -574,12 +574,9 @@ class BlockSender implements java.io.Closeable {
|
|||
* writing to client timed out. This happens if the client reads
|
||||
* part of a block and then decides not to read the rest (but leaves
|
||||
* the socket open).
|
||||
*
|
||||
* Reporting of this case is done in DataXceiver#run
|
||||
*/
|
||||
if (LOG.isTraceEnabled()) {
|
||||
LOG.trace("Failed to send data:", e);
|
||||
} else {
|
||||
LOG.info("Failed to send data: " + e);
|
||||
}
|
||||
} else {
|
||||
/* Exception while writing to the client. Connection closure from
|
||||
* the other end is mostly the case and we do not care much about
|
||||
|
|
|
@ -39,6 +39,7 @@ import java.io.OutputStream;
|
|||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketException;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.nio.channels.ClosedChannelException;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.Arrays;
|
||||
|
@ -240,6 +241,15 @@ class DataXceiver extends Receiver implements Runnable {
|
|||
} else {
|
||||
LOG.info(s + "; " + t);
|
||||
}
|
||||
} else if (op == Op.READ_BLOCK && t instanceof SocketTimeoutException) {
|
||||
String s1 =
|
||||
"Likely the client has stopped reading, disconnecting it";
|
||||
s1 += " (" + s + ")";
|
||||
if (LOG.isTraceEnabled()) {
|
||||
LOG.trace(s1, t);
|
||||
} else {
|
||||
LOG.info(s1 + "; " + t);
|
||||
}
|
||||
} else {
|
||||
LOG.error(s, t);
|
||||
}
|
||||
|
@ -520,9 +530,11 @@ class DataXceiver extends Receiver implements Runnable {
|
|||
/* What exactly should we do here?
|
||||
* Earlier version shutdown() datanode if there is disk error.
|
||||
*/
|
||||
LOG.warn(dnR + ":Got exception while serving " + block + " to "
|
||||
if (!(ioe instanceof SocketTimeoutException)) {
|
||||
LOG.warn(dnR + ":Got exception while serving " + block + " to "
|
||||
+ remoteAddress, ioe);
|
||||
datanode.metrics.incrDatanodeNetworkErrors();
|
||||
datanode.metrics.incrDatanodeNetworkErrors();
|
||||
}
|
||||
throw ioe;
|
||||
} finally {
|
||||
IOUtils.closeStream(blockSender);
|
||||
|
|
Loading…
Reference in New Issue