Browse Source

HADOOP-1028. Add log messages for server startup and shutdown. Contributed by Tsz Wo Sze.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@550952 13f79535-47bb-0310-9956-ffa450edef68
Doug Cutting 18 years ago
parent
commit
cf102cb27c

+ 3 - 0
CHANGES.txt

@@ -261,6 +261,9 @@ Trunk (unreleased changes)
      new FsShell commands "touchz", "test" and "stat".
      (Chris Douglas via cutting)
 
+ 80. HADOOP-1028.  Add log messages for server startup and shutdown.
+     (Tsz Wo Sze via cutting)
+
 
 Release 0.13.0 - 2007-06-08
 

+ 3 - 3
src/java/org/apache/hadoop/dfs/DataNode.java

@@ -289,7 +289,6 @@ public class DataNode implements FSConstants, Runnable {
         } catch (InterruptedException ie) {}
       }
     }
-    String errorMsg = null;
     return nsInfo;
   }
 
@@ -1103,8 +1102,8 @@ public class DataNode implements FSConstants, Runnable {
    * Only stop when "shouldRun" is turned off (which can only happen at shutdown).
    */
   public void run() {
-    LOG.info("Starting DataNode in: "+data);
-        
+    LOG.info("In DataNode.run, data = " + data);
+
     // start dataXceiveServer
     dataXceiveServer.start();
         
@@ -1324,6 +1323,7 @@ public class DataNode implements FSConstants, Runnable {
    */
   public static void main(String args[]) {
     try {
+      StringUtils.startupShutdownMessage(DataNode.class, args, LOG);
       DataNode datanode = createDataNode(args, null);
       if (datanode != null)
         datanode.join();

+ 1 - 0
src/java/org/apache/hadoop/dfs/NameNode.java

@@ -818,6 +818,7 @@ public class NameNode implements ClientProtocol, DatanodeProtocol, FSConstants {
    */
   public static void main(String argv[]) throws Exception {
     try {
+      StringUtils.startupShutdownMessage(NameNode.class, argv, LOG);
       NameNode namenode = createNameNode(argv, null);
       if (namenode != null)
         namenode.join();

+ 1 - 0
src/java/org/apache/hadoop/dfs/SecondaryNameNode.java

@@ -461,6 +461,7 @@ public class SecondaryNameNode implements FSConstants, Runnable {
    * @exception Exception if the filesystem does not exist.
    */
   public static void main(String[] argv) throws Exception {
+    StringUtils.startupShutdownMessage(SecondaryNameNode.class, argv, LOG);
     Configuration tconf = new Configuration();
     if (argv.length >= 1) {
       SecondaryNameNode secondary = new SecondaryNameNode(tconf);

+ 1 - 0
src/java/org/apache/hadoop/mapred/JobTracker.java

@@ -1719,6 +1719,7 @@ public class JobTracker implements MRConstants, InterTrackerProtocol, JobSubmiss
    * JobTracker should be run as part of the DFS Namenode process.
    */
   public static void main(String argv[]) throws IOException, InterruptedException {
+    StringUtils.startupShutdownMessage(JobTracker.class, argv, LOG);
     if (argv.length != 0) {
       System.out.println("usage: JobTracker");
       System.exit(-1);

+ 1 - 0
src/java/org/apache/hadoop/mapred/TaskTracker.java

@@ -1804,6 +1804,7 @@ public class TaskTracker
    * Start the TaskTracker, point toward the indicated JobTracker
    */
   public static void main(String argv[]) throws Exception {
+    StringUtils.startupShutdownMessage(TaskTracker.class, argv, LOG);
     if (argv.length != 0) {
       System.out.println("usage: TaskTracker");
       System.exit(-1);

+ 50 - 0
src/java/org/apache/hadoop/util/StringUtils.java

@@ -20,11 +20,14 @@ package org.apache.hadoop.util;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.net.InetAddress;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.UnknownHostException;
 import java.text.DateFormat;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.StringTokenizer;
@@ -266,4 +269,51 @@ public class StringUtils {
     }
     return (String[])values.toArray(new String[values.size()]);
   }
+
+  /**
+   * Return hostname without throwing exception.
+   * @return hostname
+   */
+  public static String getHostname() {
+    try {return "" + InetAddress.getLocalHost();}
+    catch(UnknownHostException uhe) {return "" + uhe;}
+  }
+
+  /**
+   * Return a message for logging.
+   * @param prefix prefix keyword for the message
+   * @param msg content of the message
+   * @return a message for logging
+   */
+  private static String toStartupShutdownString(String prefix, String [] msg) {
+    StringBuffer b = new StringBuffer(prefix);
+    b.append("\n/************************************************************");
+    for(String s : msg)
+      b.append("\n" + prefix + s);
+    b.append("\n************************************************************/");
+    return b.toString();
+  }
+
+  /**
+   * Print a log message for starting up and shutting down
+   * @param clazz the class of the server
+   * @param args arguments
+   * @param LOG the target log object
+   */
+  public static void startupShutdownMessage(Class clazz, String[] args,
+                                     final org.apache.commons.logging.Log LOG) {
+    final String hostname = getHostname();
+    final String classname = clazz.getSimpleName();
+    LOG.info(toStartupShutdownString("STARTUP_MSG: ", new String[]{
+      "Starting " + classname,
+      "  host = " + hostname,
+      "  args = " + Arrays.asList(args)}));
+
+    Runtime.getRuntime().addShutdownHook(new Thread() {
+      public void run() {
+        LOG.info(toStartupShutdownString("SHUTDOWN_MSG: ", new String[]{
+          "Shutting down " + classname + " at " + hostname}));
+      }
+    });
+  }
 }