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 cu...@apache.org on 2007/05/07 23:05:34 UTC
svn commit: r535993 - in /lucene/hadoop/trunk: CHANGES.txt
src/java/org/apache/hadoop/dfs/DataNode.java
Author: cutting
Date: Mon May 7 14:05:30 2007
New Revision: 535993
URL: http://svn.apache.org/viewvc?view=rev&rev=535993
Log:
HADOOP-1200. Restore disk checking lost in HADOOP-1170. Contributed by Hairong.
Modified:
lucene/hadoop/trunk/CHANGES.txt
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java
Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=535993&r1=535992&r2=535993
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Mon May 7 14:05:30 2007
@@ -348,6 +348,9 @@
103. HADOOP-1270. Randomize the fetch of map outputs, speeding the
shuffle. (Arun C Murthy via cutting)
+104. HADOOP-1200. Restore disk checking lost in HADOOP-1170.
+ (Hairong Kuang via cutting)
+
Release 0.12.3 - 2007-04-06
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java?view=diff&rev=535993&r1=535992&r2=535993
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java Mon May 7 14:05:30 2007
@@ -389,8 +389,29 @@
}
}
}
-
- void handleDiskError(String errMsgr) {
+
+
+ /* Check if there is no space in disk or the disk is read-only
+ * when IOException occurs.
+ * If so, handle the error */
+ private void checkDiskError( IOException e ) throws IOException {
+ if (e.getMessage().startsWith("No space left on device")) {
+ throw new DiskOutOfSpaceException("No space left on device");
+ } else {
+ checkDiskError();
+ }
+ }
+
+ /* Check if there is no disk space and if so, handle the error*/
+ private void checkDiskError( ) throws IOException {
+ try {
+ data.checkDataDir();
+ } catch(DiskErrorException de) {
+ handleDiskError(de.getMessage());
+ }
+ }
+
+ private void handleDiskError(String errMsgr) {
LOG.warn("DataNode is shutting down.\n" + errMsgr);
try {
namenode.errorReport(
@@ -494,9 +515,6 @@
}
}
} // synchronized
- } catch(DiskErrorException e) {
- handleDiskError(e.getLocalizedMessage());
- return;
} catch(RemoteException re) {
String reClass = re.getClassName();
if (UnregisteredDatanodeException.class.getName().equals(reClass) ||
@@ -536,7 +554,12 @@
// safely garbage-collected.
//
Block toDelete[] = ((BlockCommand)cmd).getBlocks();
- data.invalidate(toDelete);
+ try {
+ data.invalidate(toDelete);
+ } catch(IOException e) {
+ checkDiskError();
+ throw e;
+ }
myMetrics.removedBlocks(toDelete.length);
break;
case DNA_SHUTDOWN:
@@ -804,7 +827,14 @@
//
// Open local disk out
//
- DataOutputStream out = new DataOutputStream(new BufferedOutputStream(data.writeToBlock(b)));
+ OutputStream o;
+ try {
+ o = data.writeToBlock(b);
+ } catch( IOException e ) {
+ checkDiskError( e );
+ throw e;
+ }
+ DataOutputStream out = new DataOutputStream(new BufferedOutputStream(o));
InetSocketAddress mirrorTarget = null;
String mirrorNode = null;
try {
@@ -893,12 +923,8 @@
out.write(buf, 0, bytesRead);
myMetrics.wroteBytes(bytesRead);
} catch (IOException iex) {
- if (iex.getMessage().startsWith("No space left on device")) {
- throw new DiskOutOfSpaceException("No space left on device");
- } else {
- shutdown();
- throw iex;
- }
+ checkDiskError(iex);
+ throw iex;
}
len -= bytesRead;
}
@@ -972,7 +998,7 @@
try {
out.close();
} catch (IOException iex) {
- shutdown();
+ checkDiskError(iex);
throw iex;
}
}