1
0
Selaa lähdekoodia

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 vuotta sitten
vanhempi
commit
1641410c3e

+ 3 - 0
CHANGES.txt

@@ -300,6 +300,9 @@ Trunk (unreleased changes)
      locations returned to client, so that load is better balanced.
      locations returned to client, so that load is better balanced.
      (Hairong Kuang via cutting)
      (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
 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) {}
         } 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("")) {
     if (storage.getStorageID().equals("")) {
       storage.setStorageID(dnRegistration.getStorageID());
       storage.setStorageID(dnRegistration.getStorageID());
       storage.writeAll();
       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.DataOutput;
 import java.io.IOException;
 import java.io.IOException;
 
 
-import org.apache.hadoop.io.UTF8;
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.io.WritableFactories;
 import org.apache.hadoop.io.WritableFactories;
 import org.apache.hadoop.io.WritableFactory;
 import org.apache.hadoop.io.WritableFactory;
@@ -48,6 +47,7 @@ class DatanodeRegistration extends DatanodeID implements Writable {
   
   
   void setStorageInfo(DataStorage storage) {
   void setStorageInfo(DataStorage storage) {
     this.storageInfo = new StorageInfo(storage);
     this.storageInfo = new StorageInfo(storage);
+    this.storageID = storage.getStorageID();
   }
   }
   
   
   void setName(String name) {
   void setName(String name) {