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/08/15 02:01:56 UTC

svn commit: r565981 - in /lucene/hadoop/trunk: CHANGES.txt src/java/org/apache/hadoop/dfs/BlockCrcUpgrade.java

Author: cutting
Date: Tue Aug 14 17:01:55 2007
New Revision: 565981

URL: http://svn.apache.org/viewvc?view=rev&rev=565981
Log:
HADOOP-1712.  Fix an unhandled exception on datanode during block CRC upgrade.

Modified:
    lucene/hadoop/trunk/CHANGES.txt
    lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCrcUpgrade.java

Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=565981&r1=565980&r2=565981
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Tue Aug 14 17:01:55 2007
@@ -532,6 +532,10 @@
 156. HADOOP-1663.  Return a non-zero exit code if streaming fails. (Lohit Renu
      via omalley)
 
+157. HADOOP-1712.  Fix an unhandled exception on datanode during block
+     CRC upgrade. (Raghu Angadi via cutting)
+
+
 Release 0.13.0 - 2007-06-08
 
  1. HADOOP-1047.  Fix TestReplication to succeed more reliably.

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCrcUpgrade.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCrcUpgrade.java?view=diff&rev=565981&r1=565980&r2=565981
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCrcUpgrade.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCrcUpgrade.java Tue Aug 14 17:01:55 2007
@@ -45,7 +45,6 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.HashSet;
-import java.util.Random;
 
 /* This containtains information about CRC file and blocks created by
  * ChecksumFileSystem for a given block.
@@ -1377,6 +1376,10 @@
   }
   
   void doUpgrade() throws IOException {
+    doUpgradeInternal();
+  }
+  
+  private void doUpgradeInternal() {
     
     if ( upgradeCompleted ) {
       assert offlineUpgrade : 
@@ -1410,13 +1413,23 @@
     
     LOG.info("Starting Block CRC upgrade.");
     
-    namenode = (DatanodeProtocol) RetryProxy.create(
-                    DatanodeProtocol.class,
-                    RPC.waitForProxy(DatanodeProtocol.class,
-                                     DatanodeProtocol.versionID,
-                                     getDatanode().getNameNodeAddr(),
-                                     conf),
-                    methodNameToPolicyMap);
+    for (;;) {
+      try {
+        namenode = (DatanodeProtocol) RetryProxy.create(
+                            DatanodeProtocol.class,
+                            RPC.waitForProxy(DatanodeProtocol.class,
+                                             DatanodeProtocol.versionID,
+                                             getDatanode().getNameNodeAddr(),
+                                             conf),
+                            methodNameToPolicyMap);
+        break;
+      } catch (IOException e) {
+        LOG.warn("Exception while trying to connect to NameNode at " +
+                 getDatanode().getNameNodeAddr().toString() + " : " + 
+                 StringUtils.stringifyException(e));
+        BlockCrcUpgradeUtils.sleep(10, "will retry connecting to NameNode");
+      }
+    }
                                   
     conf = null;
    
@@ -1428,7 +1441,17 @@
     Block [] blockArr = dataset.getBlockReport();
     
     for ( Block b : blockArr ) {
-      File blockFile = dataset.getBlockFile( b );
+      File blockFile = null;
+      try {
+        blockFile = dataset.getBlockFile( b );
+      } catch (IOException e) {
+        //The block might just be deleted. ignore it.
+        LOG.warn("Could not find file location for " + b + 
+                 ". It might already be deleted. Exception : " +
+                 StringUtils.stringifyException(e));
+        errors++;
+        continue;
+      }
       if (!blockFile.exists()) {
         LOG.error("could not find block file " + blockFile);
         errors++;