You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by dh...@apache.org on 2011/01/03 08:51:14 UTC

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

Author: dhruba
Date: Mon Jan  3 07:51:14 2011
New Revision: 1054544

URL: http://svn.apache.org/viewvc?rev=1054544&view=rev
Log:
HDFS-1540. Make Datanode handle errors from RPC calls to namenode
more elegantly. (dhruba)


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

Modified: hadoop/hdfs/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/CHANGES.txt?rev=1054544&r1=1054543&r2=1054544&view=diff
==============================================================================
--- hadoop/hdfs/trunk/CHANGES.txt (original)
+++ hadoop/hdfs/trunk/CHANGES.txt Mon Jan  3 07:51:14 2011
@@ -51,6 +51,9 @@ Trunk (unreleased changes)
     HDFS-1509. A savenamespace command writes the fsimage and edits into
     all configured directories. (dhruba)
 
+    HDFS-1540. Make Datanode handle errors from RPC calls to namenode
+    more elegantly. (dhruba)
+
 Release 0.22.0 - Unreleased
 
   NEW FEATURES

Modified: hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java?rev=1054544&r1=1054543&r2=1054544&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java (original)
+++ hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java Mon Jan  3 07:51:14 2011
@@ -548,12 +548,12 @@ public class DataNode extends Configured
       try {
         nsInfo = namenode.versionRequest();
         break;
-      } catch(SocketTimeoutException e) {  // namenode is busy
-        LOG.info("Problem connecting to server: " + getNameNodeAddr());
-        try {
-          Thread.sleep(1000);
-        } catch (InterruptedException ie) {}
+      } catch(IOException e) {  // namenode cannot be contacted
+        LOG.info("Problem connecting to server: " + getNameNodeAddr(), e);
       }
+      try {
+        Thread.sleep(1000);
+      } catch (InterruptedException ie) {}
     }
     String errorMsg = null;
     // verify build version
@@ -683,12 +683,21 @@ public class DataNode extends Configured
         dnRegistration.name = machineName + ":" + dnRegistration.getPort();
         dnRegistration = namenode.registerDatanode(dnRegistration);
         break;
-      } catch(SocketTimeoutException e) {  // namenode is busy
-        LOG.info("Problem connecting to server: " + getNameNodeAddr());
-        try {
-          Thread.sleep(1000);
-        } catch (InterruptedException ie) {}
+      } catch(RemoteException re) {
+        IOException ue = re.unwrapRemoteException(
+                           UnregisteredNodeException.class,
+                           DisallowedDatanodeException.class,
+                           IncorrectVersionException.class);
+        if (ue != re) {
+          LOG.warn("DataNode is shutting down: ", re);
+          throw ue; 
+        }
+      } catch(IOException e) {  // namenode cannot be contacted
+        LOG.info("Problem connecting to server: " + getNameNodeAddr(), e);
       }
+      try {
+        Thread.sleep(1000);
+      } catch (InterruptedException ie) {}
     }
     assert ("".equals(storage.getStorageID()) 
             && !"".equals(dnRegistration.getStorageID()))