瀏覽代碼

HDFS-5455. NN should update storageMap on first heartbeat.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-2832@1538787 13f79535-47bb-0310-9956-ffa450edef68
Arpit Agarwal 11 年之前
父節點
當前提交
1d357365b7

+ 2 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-2832.txt

@@ -68,3 +68,5 @@ IMPROVEMENTS:
     HDFS-5448. Fix break caused by previous checkin for HDFS-5448. (Arpit
     Agarwal)
 
+    HDFS-5455. NN should update storageMap on first heartbeat. (Arpit Agarwal)
+

+ 11 - 11
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java

@@ -350,18 +350,16 @@ public class DatanodeDescriptor extends DatanodeInfo {
     this.volumeFailures = volFailures;
     for (StorageReport report : reports) {
       DatanodeStorageInfo storage = storageMap.get(report.getStorageID());
-      if (storage != null) {
-        storage.receivedHeartbeat(report);
-        totalCapacity += report.getCapacity();
-        totalRemaining += report.getRemaining();
-        totalBlockPoolUsed += report.getBlockPoolUsed();
-        totalDfsUsed += report.getDfsUsed();
-      } else {
-        // This warning is generally benign during cluster initialization
-        // when the heartbeat is received before the initial block reports
-        // from each storage.
-        LOG.warn("Unrecognized storage ID " + report.getStorageID());
+      if (storage == null) {
+        // This is seen during cluster initialization when the heartbeat
+        // is received before the initial block reports from each storage.
+        storage = updateStorage(new DatanodeStorage(report.getStorageID()));
       }
+      storage.receivedHeartbeat(report);
+      totalCapacity += report.getCapacity();
+      totalRemaining += report.getRemaining();
+      totalBlockPoolUsed += report.getBlockPoolUsed();
+      totalDfsUsed += report.getDfsUsed();
     }
     rollBlocksScheduled(getLastUpdate());
 
@@ -651,6 +649,8 @@ public class DatanodeDescriptor extends DatanodeInfo {
     synchronized (storageMap) {
       DatanodeStorageInfo storage = storageMap.get(s.getStorageID());
       if (storage == null) {
+        LOG.info("Adding new storage ID " + s.getStorageID() +
+                 " for DN " + getXferAddr());
         storage = new DatanodeStorageInfo(this, s);
         storageMap.put(s.getStorageID(), storage);
       } else {