|
@@ -211,6 +211,7 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
LOG.debug("Cached " + peer + " closing after " + opsProcessed + " ops");
|
|
|
}
|
|
|
} else {
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
throw err;
|
|
|
}
|
|
|
break;
|
|
@@ -500,6 +501,7 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
} catch (IOException ioe) {
|
|
|
LOG.debug("Error reading client status response. Will close connection.", ioe);
|
|
|
IOUtils.closeStream(out);
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
}
|
|
|
} else {
|
|
|
IOUtils.closeStream(out);
|
|
@@ -520,6 +522,7 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
*/
|
|
|
LOG.warn(dnR + ":Got exception while serving " + block + " to "
|
|
|
+ remoteAddress, ioe);
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
throw ioe;
|
|
|
} finally {
|
|
|
IOUtils.closeStream(blockSender);
|
|
@@ -657,6 +660,8 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
|
|
|
mirrorOut.flush();
|
|
|
|
|
|
+ DataNodeFaultInjector.get().writeBlockAfterFlush();
|
|
|
+
|
|
|
// read connect ack (only for clients, not for replication req)
|
|
|
if (isClient) {
|
|
|
BlockOpResponseProto connectAck =
|
|
@@ -695,6 +700,7 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
LOG.info(datanode + ":Exception transfering " +
|
|
|
block + " to mirror " + mirrorNode +
|
|
|
"- continuing without the mirror", e);
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -749,6 +755,7 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
|
|
|
} catch (IOException ioe) {
|
|
|
LOG.info("opWriteBlock " + block + " received exception " + ioe);
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
throw ioe;
|
|
|
} finally {
|
|
|
// close all opened streams
|
|
@@ -782,6 +789,10 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
datanode.transferReplicaForPipelineRecovery(blk, targets,
|
|
|
targetStorageTypes, clientName);
|
|
|
writeResponse(Status.SUCCESS, null, out);
|
|
|
+ } catch (IOException ioe) {
|
|
|
+ LOG.info("transferBlock " + blk + " received exception " + ioe);
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
+ throw ioe;
|
|
|
} finally {
|
|
|
IOUtils.closeStream(out);
|
|
|
}
|
|
@@ -873,6 +884,10 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
.build()
|
|
|
.writeDelimitedTo(out);
|
|
|
out.flush();
|
|
|
+ } catch (IOException ioe) {
|
|
|
+ LOG.info("blockChecksum " + block + " received exception " + ioe);
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
+ throw ioe;
|
|
|
} finally {
|
|
|
IOUtils.closeStream(out);
|
|
|
IOUtils.closeStream(checksumIn);
|
|
@@ -938,6 +953,7 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
} catch (IOException ioe) {
|
|
|
isOpSuccess = false;
|
|
|
LOG.info("opCopyBlock " + block + " received exception " + ioe);
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
throw ioe;
|
|
|
} finally {
|
|
|
dataXceiverServer.balanceThrottler.release();
|
|
@@ -995,6 +1011,7 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
BlockReceiver blockReceiver = null;
|
|
|
DataInputStream proxyReply = null;
|
|
|
DataOutputStream replyOut = new DataOutputStream(getOutputStream());
|
|
|
+ boolean IoeDuringCopyBlockOperation = false;
|
|
|
try {
|
|
|
// get the output stream to the proxy
|
|
|
final String dnAddr = proxySource.getXferAddr(connectToDnViaHostname);
|
|
@@ -1022,7 +1039,9 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
HdfsConstants.IO_FILE_BUFFER_SIZE));
|
|
|
|
|
|
/* send request to the proxy */
|
|
|
+ IoeDuringCopyBlockOperation = true;
|
|
|
new Sender(proxyOut).copyBlock(block, blockToken);
|
|
|
+ IoeDuringCopyBlockOperation = false;
|
|
|
|
|
|
// receive the response from the proxy
|
|
|
|
|
@@ -1065,6 +1084,10 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
opStatus = ERROR;
|
|
|
errMsg = "opReplaceBlock " + block + " received exception " + ioe;
|
|
|
LOG.info(errMsg);
|
|
|
+ if (!IoeDuringCopyBlockOperation) {
|
|
|
+ // Don't double count IO errors
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
+ }
|
|
|
throw ioe;
|
|
|
} finally {
|
|
|
// receive the last byte that indicates the proxy released its thread resource
|
|
@@ -1083,6 +1106,7 @@ class DataXceiver extends Receiver implements Runnable {
|
|
|
sendResponse(opStatus, errMsg);
|
|
|
} catch (IOException ioe) {
|
|
|
LOG.warn("Error writing reply back to " + peer.getRemoteAddressString());
|
|
|
+ datanode.metrics.incrDatanodeNetworkErrors();
|
|
|
}
|
|
|
IOUtils.closeStream(proxyOut);
|
|
|
IOUtils.closeStream(blockReceiver);
|