|
@@ -60,8 +60,11 @@ import java.io.PrintStream;
|
|
|
import java.net.InetSocketAddress;
|
|
|
import java.net.ServerSocket;
|
|
|
import java.net.Socket;
|
|
|
+import java.net.SocketException;
|
|
|
+import java.net.SocketTimeoutException;
|
|
|
import java.net.URI;
|
|
|
import java.net.UnknownHostException;
|
|
|
+import java.nio.channels.ClosedByInterruptException;
|
|
|
import java.nio.channels.ServerSocketChannel;
|
|
|
import java.nio.channels.SocketChannel;
|
|
|
import java.security.PrivilegedExceptionAction;
|
|
@@ -1172,7 +1175,13 @@ public class DataNode extends Configured
|
|
|
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");
|
|
@@ -1484,8 +1493,12 @@ public class DataNode extends Configured
|
|
|
} catch (IOException ie) {
|
|
|
LOG.warn(bpReg + ":Failed to transfer " + b + " to " +
|
|
|
targets[0] + " got ", ie);
|
|
|
- // check if there are any disk problem
|
|
|
- checkDiskError();
|
|
|
+ // check if there are any disk problem
|
|
|
+ try{
|
|
|
+ checkDiskError(ie);
|
|
|
+ } catch(IOException e) {
|
|
|
+ LOG.warn("DataNode.checkDiskError failed in run() with: ", e);
|
|
|
+ }
|
|
|
|
|
|
} finally {
|
|
|
xmitsInProgress.getAndDecrement();
|