浏览代码

HADOOP-3491. Name-node shutdown causes InterruptedException in ResolutionMonitor. Contributed by Lohit Vijayarenu.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/core/trunk@664203 13f79535-47bb-0310-9956-ffa450edef68
Konstantin Shvachko 17 年之前
父节点
当前提交
81a6d9c6db
共有 2 个文件被更改,包括 30 次插入22 次删除
  1. 3 0
      CHANGES.txt
  2. 27 22
      src/java/org/apache/hadoop/dfs/FSNamesystem.java

+ 3 - 0
CHANGES.txt

@@ -528,6 +528,9 @@ Trunk (unreleased changes)
 
     HADOOP-3509. Fix NPE in FSNamesystem.close. (Tsz Wo (Nicholas), SZE via shv)
 
+    HADOOP-3491. Name-node shutdown causes InterruptedException in 
+    ResolutionMonitor. (Lohit Vijayarenu via shv)
+
 Release 0.17.0 - 2008-05-18
 
   INCOMPATIBLE CHANGES

+ 27 - 22
src/java/org/apache/hadoop/dfs/FSNamesystem.java

@@ -1816,29 +1816,34 @@ class FSNamesystem implements FSConstants, FSNamesystemMBean {
     public void run() {
       try {
         while (fsRunning) {
-          List <DatanodeDescriptor> datanodes = 
-            new ArrayList<DatanodeDescriptor>(resolutionQueue.size());
-          // Block if the queue is empty
-          datanodes.add(resolutionQueue.take());
-          resolutionQueue.drainTo(datanodes);
-          List<String> dnHosts = new ArrayList<String>(datanodes.size());
-          for (DatanodeDescriptor d : datanodes) {
-            dnHosts.add(d.getName());
-          }
-          List<String> rName = dnsToSwitchMapping.resolve(dnHosts);
-          if (rName == null) {
-            LOG.error("The resolve call returned null! Using " + 
-                NetworkTopology.DEFAULT_RACK + " for some hosts");
-            rName = new ArrayList<String>(dnHosts.size());
-            for (int i = 0; i < dnHosts.size(); i++) {
-              rName.add(NetworkTopology.DEFAULT_RACK);
+          try {
+            List <DatanodeDescriptor> datanodes = 
+              new ArrayList<DatanodeDescriptor>(resolutionQueue.size());
+            // Block if the queue is empty
+            datanodes.add(resolutionQueue.take());
+            resolutionQueue.drainTo(datanodes);
+            List<String> dnHosts = new ArrayList<String>(datanodes.size());
+            for (DatanodeDescriptor d : datanodes) {
+              dnHosts.add(d.getName());
             }
-          }
-          int i = 0;
-          for (String m : rName) {
-            DatanodeDescriptor d = datanodes.get(i++); 
-            d.setNetworkLocation(m);
-            clusterMap.add(d);
+            List<String> rName = dnsToSwitchMapping.resolve(dnHosts);
+            if (rName == null) {
+              LOG.error("The resolve call returned null! Using " + 
+                  NetworkTopology.DEFAULT_RACK + " for some hosts");
+              rName = new ArrayList<String>(dnHosts.size());
+              for (int i = 0; i < dnHosts.size(); i++) {
+                rName.add(NetworkTopology.DEFAULT_RACK);
+              }
+            }
+            int i = 0;
+            for (String m : rName) {
+              DatanodeDescriptor d = datanodes.get(i++); 
+              d.setNetworkLocation(m);
+              clusterMap.add(d);
+            }
+          } catch (InterruptedException e) {
+              FSNamesystem.LOG.debug("ResolutionMonitor thread received " +
+                                     "InterruptException. " + e);
           }
         }
       } catch (Exception e) {