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/03/30 19:49:08 UTC

svn commit: r524205 - in /lucene/hadoop/trunk: CHANGES.txt src/java/org/apache/hadoop/dfs/NameNode.java src/java/org/apache/hadoop/ipc/Server.java

Author: cutting
Date: Fri Mar 30 10:49:07 2007
New Revision: 524205

URL: http://svn.apache.org/viewvc?view=rev&rev=524205
Log:
HADOOP-1178.  Fix a NullPointerException during namenode startup.  Contributed by Dhruba.

Modified:
    lucene/hadoop/trunk/CHANGES.txt
    lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java
    lucene/hadoop/trunk/src/java/org/apache/hadoop/ipc/Server.java

Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=524205&r1=524204&r2=524205
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Fri Mar 30 10:49:07 2007
@@ -70,6 +70,9 @@
 21. HADOOP-1110.  Fix an off-by-one error counting map inputs.
     (David Bowen via cutting)
 
+22. HADOOP-1178.  Fix a NullPointerException during namenode startup.
+    (Dhruba Borthakur via cutting)
+
 
 Release 0.12.3 (not yet released)
 

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=524205&r1=524204&r2=524205
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java Fri Mar 30 10:49:07 2007
@@ -180,18 +180,24 @@
       this.handlerCount = conf.getInt("dfs.namenode.handler.count", 10);
       this.server = RPC.getServer(this, hostname, port, handlerCount, 
                                   false, conf);
-      this.server.start();      
 
       // The rpc-server port can be ephemeral... ensure we have the correct info
       this.nameNodeAddress = this.server.getListenerAddress(); 
       conf.set("fs.default.name", new String(nameNodeAddress.getHostName() + ":" + nameNodeAddress.getPort()));
       LOG.info("Namenode up at: " + this.nameNodeAddress);
 
-      this.namesystem = new FSNamesystem(dirs, this.nameNodeAddress.getHostName(), this.nameNodeAddress.getPort(), this, conf);
+      try {
+        this.namesystem = new FSNamesystem(dirs, this.nameNodeAddress.getHostName(), this.nameNodeAddress.getPort(), this, conf);
+        this.server.start();  //start RPC server   
 
-      this.emptier = new Thread(new Trash(conf).getEmptier(), "Trash Emptier");
-      this.emptier.setDaemon(true);
-      this.emptier.start();
+        this.emptier = new Thread(new Trash(conf).getEmptier(), "Trash Emptier");
+        this.emptier.setDaemon(true);
+        this.emptier.start();
+      } catch (IOException e) {
+        this.server.stop();
+        throw e;
+      }
+      
     }
     
     /**

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/ipc/Server.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/ipc/Server.java?view=diff&rev=524205&r1=524204&r2=524205
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/ipc/Server.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/ipc/Server.java Fri Mar 30 10:49:07 2007
@@ -133,14 +133,15 @@
   private long maxCallStartAge;
   private int maxQueueSize;
 
-  private boolean running = true;                 // true while server runs
+  volatile private boolean running = true;         // true while server runs
   private LinkedList callQueue = new LinkedList(); // queued calls
 
   private List connectionList = 
        Collections.synchronizedList(new LinkedList()); //maintain a list
                                                        //of client connectionss
-  private Listener listener;
+  private Listener listener = null;
   private int numConnections = 0;
+  private Handler[] handlers = null;
   
   /** A call queued for handling. */
   private static class Call {
@@ -375,6 +376,13 @@
         selector.wakeup();
         Thread.yield();
       }
+      if (acceptChannel != null) {
+        try {
+          acceptChannel.socket().close();
+        } catch (IOException e) {
+            LOG.info(getName() + ":Exception in closing listener socket. " + e);
+        }
+      }
     }
   }
 
@@ -629,10 +637,11 @@
   /** Starts the service.  Must be called before any calls will be handled. */
   public synchronized void start() throws IOException {
     listener.start();
+    handlers = new Handler[handlerCount];
     
     for (int i = 0; i < handlerCount; i++) {
-      Handler handler = new Handler(i);
-      handler.start();
+      handlers[i] = new Handler(i);
+      handlers[i].start();
     }
   }
 
@@ -640,6 +649,14 @@
   public synchronized void stop() {
     LOG.info("Stopping server on " + port);
     running = false;
+    if (handlers != null) {
+      for (int i = 0; i < handlerCount; i++) {
+        if (handlers[i] != null) {
+          handlers[i].interrupt();
+        }
+      }
+    }
+    listener.interrupt();
     listener.doStop();
     notifyAll();
   }