浏览代码

HADOOP-1578. Fix datanode to send its storage id to namenode during registration. Contributed by Konstantin.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@555376 13f79535-47bb-0310-9956-ffa450edef68
Doug Cutting 18 年之前
父节点
当前提交
1641410c3e
共有 3 个文件被更改,包括 15 次插入1 次删除
  1. 3 0
      CHANGES.txt
  2. 11 0
      src/java/org/apache/hadoop/dfs/DataNode.java
  3. 1 1
      src/java/org/apache/hadoop/dfs/DatanodeRegistration.java

+ 3 - 0
CHANGES.txt

@@ -300,6 +300,9 @@ Trunk (unreleased changes)
      locations returned to client, so that load is better balanced.
      (Hairong Kuang via cutting)
 
+ 93. HADOOP-1578.  Fix datanode to send its storage id to namenode
+     during registration.  (Konstantin Shvachko via cutting)
+
 
 Release 0.13.0 - 2007-06-08
 

+ 11 - 0
src/java/org/apache/hadoop/dfs/DataNode.java

@@ -353,9 +353,20 @@ public class DataNode implements FSConstants, Runnable {
         } catch (InterruptedException ie) {}
       }
     }
+    assert ("".equals(storage.getStorageID()) 
+            && !"".equals(dnRegistration.getStorageID()))
+            || storage.getStorageID().equals(dnRegistration.getStorageID()) :
+            "New storageID can be assigned only if data-node is not formatted";
     if (storage.getStorageID().equals("")) {
       storage.setStorageID(dnRegistration.getStorageID());
       storage.writeAll();
+      LOG.info("New storage id " + dnRegistration.getStorageID()
+          + " is assigned to data-node " + dnRegistration.getName());
+    }
+    if(! storage.getStorageID().equals(dnRegistration.getStorageID())) {
+      throw new IOException("Inconsistent storage IDs. Name-node returned "
+          + dnRegistration.getStorageID() 
+          + ". Expecting " + storage.getStorageID());
     }
   }
 

+ 1 - 1
src/java/org/apache/hadoop/dfs/DatanodeRegistration.java

@@ -4,7 +4,6 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.hadoop.io.UTF8;
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.io.WritableFactories;
 import org.apache.hadoop.io.WritableFactory;
@@ -48,6 +47,7 @@ class DatanodeRegistration extends DatanodeID implements Writable {
   
   void setStorageInfo(DataStorage storage) {
     this.storageInfo = new StorageInfo(storage);
+    this.storageID = storage.getStorageID();
   }
   
   void setName(String name) {