You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ki...@apache.org on 2013/03/27 15:45:14 UTC
svn commit: r1461615 - in /hadoop/common/branches/branch-1: CHANGES.txt
src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java
Author: kihwal
Date: Wed Mar 27 14:45:14 2013
New Revision: 1461615
URL: http://svn.apache.org/r1461615
Log:
HDFS-4581. DataNode.checkDiskError should not be called on network errors. Contributed by Rohit Kochar.
Modified:
hadoop/common/branches/branch-1/CHANGES.txt
hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java
Modified: hadoop/common/branches/branch-1/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/CHANGES.txt?rev=1461615&r1=1461614&r2=1461615&view=diff
==============================================================================
--- hadoop/common/branches/branch-1/CHANGES.txt (original)
+++ hadoop/common/branches/branch-1/CHANGES.txt Wed Mar 27 14:45:14 2013
@@ -28,6 +28,9 @@ Release 1.3.0 - unreleased
HDFS-4622. Remove redundant synchronized from
FSNamesystem#rollEditLog in branch-1. (Jing Zhao via suresh)
+ HDFS-4581. DataNode.checkDiskError should not be called on network errors.
+ (Rohit Kochar via kihwal)
+
Release 1.2.0 - unreleased
INCOMPATIBLE CHANGES
Modified: hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java?rev=1461615&r1=1461614&r2=1461615&view=diff
==============================================================================
--- hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java (original)
+++ hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java Wed Mar 27 14:45:14 2013
@@ -27,8 +27,10 @@ import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
+import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
+import java.nio.channels.ClosedByInterruptException;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.security.NoSuchAlgorithmException;
@@ -923,10 +925,16 @@ public class DataNode extends Configured
/** Check if there is no space in disk
* @param e that caused this checkDiskError call
**/
- protected void checkDiskError(Exception e ) throws IOException {
-
- LOG.warn("checkDiskError: exception: ", e);
-
+ protected void checkDiskError(Exception e ) throws IOException {
+ LOG.warn("checkDiskError: exception: ", e);
+ if (e instanceof SocketException || e instanceof SocketTimeoutException
+ || e instanceof ClosedByInterruptException
+ || e.getMessage().startsWith("Broken pipe")) {
+ LOG.info("Not checking disk as checkDiskError was called on a network" +
+ " related exception");
+ return;
+ }
+
if (e.getMessage() != null &&
e.getMessage().startsWith("No space left on device")) {
throw new DiskOutOfSpaceException("No space left on device");
@@ -1543,8 +1551,11 @@ public class DataNode extends Configured
LOG.warn(dnRegistration + ":Failed to transfer " + b + " to " + targets[0].getName()
+ " got " + StringUtils.stringifyException(ie));
// check if there are any disk problem
- datanode.checkDiskError();
-
+ try{
+ checkDiskError(ie);
+ } catch(IOException e) {
+ LOG.warn("DataNode.checkDiskError failed in run() with: ", e);
+ }
} finally {
xmitsInProgress.getAndDecrement();
IOUtils.closeStream(blockSender);