You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2007/06/19 00:05:28 UTC

svn commit: r548507 - in /lucene/hadoop/trunk: CHANGES.txt src/java/org/apache/hadoop/dfs/DataNode.java src/java/org/apache/hadoop/dfs/DatanodeRegistration.java src/java/org/apache/hadoop/dfs/NameNode.java src/java/org/apache/hadoop/dfs/Storage.java

Author: cutting
Date: Mon Jun 18 15:05:27 2007
New Revision: 548507

URL: http://svn.apache.org/viewvc?view=rev&rev=548507
Log:
HADOOP-1492.  Fix a NullPointerException handling version mismatch during datanode registration.  Contributed by Konstantin.

Modified:
    lucene/hadoop/trunk/CHANGES.txt
    lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java
    lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeRegistration.java
    lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java
    lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Storage.java

Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=548507&r1=548506&r2=548507
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Mon Jun 18 15:05:27 2007
@@ -169,6 +169,10 @@
      and also substantially improves performance.
      (Arun C Murthy via cutting)
 
+ 53. HADOOP-1492.  Fix a NullPointerException handling version
+     mismatch during datanode registration.
+     (Konstantin Shvachko via cutting)
+
 
 Release 0.13.0 - 2007-06-08
 

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java?view=diff&rev=548507&r1=548506&r2=548507
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java Mon Jun 18 15:05:27 2007
@@ -212,6 +212,10 @@
                                      conf.get("dfs.datanode.dns.nameserver","default"));
     InetSocketAddress nameNodeAddr = createSocketAddr(
                                                       conf.get("fs.default.name", "local"));
+    int tmpPort = conf.getInt("dfs.datanode.port", 50010);
+    storage = new DataStorage();
+    // construct registration
+    this.dnRegistration = new DatanodeRegistration(machineName + ":" + tmpPort);
 
     // connect to name node
     this.namenode = (DatanodeProtocol) 
@@ -225,15 +229,15 @@
     // read storage info, lock data dirs and transition fs state if necessary
     StartupOption startOpt = getStartupOption(conf);
     assert startOpt != null : "Startup option must be set.";
-    storage = new DataStorage();
     storage.recoverTransitionRead(nsInfo, dataDirs, startOpt);
+    // adjust
+    this.dnRegistration.setStorageInfo(storage);
       
     // initialize data node internal structure
     this.data = new FSDataset(storage, conf);
       
     // find free port
     ServerSocket ss = null;
-    int tmpPort = conf.getInt("dfs.datanode.port", 50010);
     String bindAddress = conf.get("dfs.datanode.bindAddress", "0.0.0.0");
     while (ss == null) {
       try {
@@ -244,11 +248,8 @@
         tmpPort++;
       }
     }
-    // construct registration
-    this.dnRegistration = new DatanodeRegistration(
-                                                   machineName + ":" + tmpPort, 
-                                                   -1,   // info port determined later
-                                                   storage);
+    // adjust machine name with the actual port
+    this.dnRegistration.setName(machineName + ":" + tmpPort);
       
     this.dataXceiveServer = new Daemon(new DataXceiveServer(ss));
 
@@ -265,7 +266,8 @@
     this.infoServer = new StatusHttpServer("datanode", infoServerBindAddress, infoServerPort, true);
     this.infoServer.addServlet(null, "/streamFile/*", StreamFile.class);
     this.infoServer.start();
-    this.dnRegistration.infoPort = this.infoServer.getPort();
+    // adjust info port
+    this.dnRegistration.setInfoPort(this.infoServer.getPort());
     // get network location
     this.networkLoc = conf.get("dfs.datanode.rack");
     if (networkLoc == null)  // exec network script or set the default rack

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeRegistration.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeRegistration.java?view=diff&rev=548507&r1=548506&r2=548507
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeRegistration.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeRegistration.java Mon Jun 18 15:05:27 2007
@@ -38,11 +38,21 @@
   /**
    * Create DatanodeRegistration
    */
-  public DatanodeRegistration(String nodeName, 
-                              int infoPort,
-                              DataStorage storage) {
-    super(nodeName, storage.getStorageID(), infoPort);
+  public DatanodeRegistration(String nodeName) {
+    super(nodeName, "", -1);
+    this.storageInfo = new StorageInfo();
+  }
+  
+  void setInfoPort(int infoPort) {
+    this.infoPort = infoPort;
+  }
+  
+  void setStorageInfo(DataStorage storage) {
     this.storageInfo = new StorageInfo(storage);
+  }
+  
+  void setName(String name) {
+    this.name = name;
   }
 
   /**

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java?view=diff&rev=548507&r1=548506&r2=548507
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java Mon Jun 18 15:05:27 2007
@@ -646,7 +646,8 @@
                           int errorCode, 
                           String msg) throws IOException {
     // Log error message from datanode
-    LOG.info("Report from " + nodeReg.getName() + ": " + msg);
+    String dnName = (nodeReg == null ? "unknown DataNode" : nodeReg.getName());
+    LOG.info("Error report from " + dnName + ": " + msg);
     if (errorCode == DatanodeProtocol.NOTIFY) {
       return;
     }

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Storage.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Storage.java?view=diff&rev=548507&r1=548506&r2=548507
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Storage.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Storage.java Mon Jun 18 15:05:27 2007
@@ -23,6 +23,7 @@
 import java.io.IOException;
 import java.io.RandomAccessFile;
 import java.nio.channels.FileLock;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Iterator;
 import java.util.Properties;
@@ -115,7 +116,7 @@
   }
   
   private NodeType storageType;    // Type of the node using this storage 
-  protected List<StorageDirectory> storageDirs;
+  protected List<StorageDirectory> storageDirs = new ArrayList<StorageDirectory>();
   
   /**
    * One of the storage directories.