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 sz...@apache.org on 2008/11/04 19:45:21 UTC

svn commit: r711350 - in /hadoop/core/trunk: CHANGES.txt src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java

Author: szetszwo
Date: Tue Nov  4 10:45:20 2008
New Revision: 711350

URL: http://svn.apache.org/viewvc?rev=711350&view=rev
Log:
HADOOP-4388. Datanode should handle invalid blocks and keep transferring the remaining blocks.  (Suresh Srinivas via szetszwo)

Modified:
    hadoop/core/trunk/CHANGES.txt
    hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java

Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=711350&r1=711349&r2=711350&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Tue Nov  4 10:45:20 2008
@@ -77,6 +77,10 @@
     HADOOP-4346. Implement blocking connect so that Hadoop is not affected
     by selector problem with JDK default implementation. (Raghu Angadi)
 
+    HADOOP-4388. If there are invalid blocks in the transfer list, Datanode
+    should handle them and keep transferring the remaining blocks.  (Suresh
+    Srinivas via szetszwo)
+
 Release 0.19.0 - Unreleased
 
   INCOMPATIBLE CHANGES

Modified: hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java?rev=711350&r1=711349&r2=711350&view=diff
==============================================================================
--- hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java (original)
+++ hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataNode.java Tue Nov  4 10:45:20 2008
@@ -858,34 +858,43 @@
     um.startUpgrade();
     return;
   }
+
+  private void transferBlock( Block block, 
+                              DatanodeInfo xferTargets[] 
+                              ) throws IOException {
+    if (!data.isValidBlock(block)) {
+      String errStr = "Can't send invalid block " + block;
+      LOG.info(errStr);
+      namenode.errorReport(dnRegistration, 
+                           DatanodeProtocol.INVALID_BLOCK, 
+                           errStr);
+      return;
+    }
+
+    int numTargets = xferTargets.length;
+    if (numTargets > 0) {
+      if (LOG.isInfoEnabled()) {
+        StringBuilder xfersBuilder = new StringBuilder();
+        for (int i = 0; i < numTargets; i++) {
+          xfersBuilder.append(xferTargets[i].getName());
+          xfersBuilder.append(" ");
+        }
+        LOG.info(dnRegistration + " Starting thread to transfer block " + 
+                 block + " to " + xfersBuilder);                       
+      }
+
+      new Daemon(new DataTransfer(xferTargets, block, this)).start();
+    }
+  }
+
   private void transferBlocks( Block blocks[], 
                                DatanodeInfo xferTargets[][] 
-                               ) throws IOException {
+                               ) {
     for (int i = 0; i < blocks.length; i++) {
-      if (!data.isValidBlock(blocks[i])) {
-        String errStr = "Can't send invalid block " + blocks[i];
-        LOG.info(errStr);
-        namenode.errorReport(dnRegistration, 
-                             DatanodeProtocol.INVALID_BLOCK, 
-                             errStr);
-        break;
-      }
-      int numTargets = xferTargets[i].length;
-      if (numTargets > 0) {
-        if (LOG.isInfoEnabled()) {
-          StringBuilder xfersBuilder = new StringBuilder();
-          for (int j = 0; j < numTargets; j++) {
-            DatanodeInfo nodeInfo = xferTargets[i][j];
-            xfersBuilder.append(nodeInfo.getName());
-            if (j < (numTargets - 1)) {
-              xfersBuilder.append(", ");
-            }
-          }
-          String xfersTo = xfersBuilder.toString();
-          LOG.info(dnRegistration + " Starting thread to transfer block " + 
-                   blocks[i] + " to " + xfersTo);                       
-        }
-        new Daemon(new DataTransfer(xferTargets[i], blocks[i], this)).start();
+      try {
+        transferBlock(blocks[i], xferTargets[i]);
+      } catch (IOException ie) {
+        LOG.warn("Failed to transfer block " + blocks[i], ie);
       }
     }
   }