浏览代码

HDFS-3390. DFSAdmin should print full stack traces of errors when DEBUG logging is enabled. Contributed by Aaron T. Myers.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1336327 13f79535-47bb-0310-9956-ffa450edef68
Aaron Myers 13 年之前
父节点
当前提交
34b9bc4e7f

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -296,6 +296,9 @@ Release 2.0.0 - UNRELEASED
     so that INodeFile and INodeFileUnderConstruction do not have to be used in
     so that INodeFile and INodeFileUnderConstruction do not have to be used in
     block management.  (John George via szetszwo)
     block management.  (John George via szetszwo)
 
 
+    HDFS-3390. DFSAdmin should print full stack traces of errors when DEBUG
+    logging is enabled. (atm)
+
   OPTIMIZATIONS
   OPTIMIZATIONS
 
 
     HDFS-2477. Optimize computing the diff between a block report and the
     HDFS-2477. Optimize computing the diff between a block report and the

+ 14 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DFSAdmin.java

@@ -26,6 +26,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.TreeSet;
 import java.util.TreeSet;
 
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.CommonConfigurationKeys;
 import org.apache.hadoop.fs.CommonConfigurationKeys;
@@ -64,9 +66,11 @@ import org.apache.hadoop.util.ToolRunner;
 @InterfaceAudience.Private
 @InterfaceAudience.Private
 public class DFSAdmin extends FsShell {
 public class DFSAdmin extends FsShell {
 
 
-  static{
+  static {
     HdfsConfiguration.init();
     HdfsConfiguration.init();
   }
   }
+  
+  private static final Log LOG = LogFactory.getLog(DFSAdmin.class);
 
 
   /**
   /**
    * An abstract class for the execution of a file system command
    * An abstract class for the execution of a file system command
@@ -1089,6 +1093,7 @@ public class DFSAdmin extends FsShell {
       return exitCode;
       return exitCode;
     }
     }
 
 
+    Exception debugException = null;
     exitCode = 0;
     exitCode = 0;
     try {
     try {
       if ("-report".equals(cmd)) {
       if ("-report".equals(cmd)) {
@@ -1143,6 +1148,7 @@ public class DFSAdmin extends FsShell {
         printUsage("");
         printUsage("");
       }
       }
     } catch (IllegalArgumentException arge) {
     } catch (IllegalArgumentException arge) {
+      debugException = arge;
       exitCode = -1;
       exitCode = -1;
       System.err.println(cmd.substring(1) + ": " + arge.getLocalizedMessage());
       System.err.println(cmd.substring(1) + ": " + arge.getLocalizedMessage());
       printUsage(cmd);
       printUsage(cmd);
@@ -1151,6 +1157,7 @@ public class DFSAdmin extends FsShell {
       // This is a error returned by hadoop server. Print
       // This is a error returned by hadoop server. Print
       // out the first line of the error message, ignore the stack trace.
       // out the first line of the error message, ignore the stack trace.
       exitCode = -1;
       exitCode = -1;
+      debugException = e;
       try {
       try {
         String[] content;
         String[] content;
         content = e.getLocalizedMessage().split("\n");
         content = e.getLocalizedMessage().split("\n");
@@ -1159,12 +1166,17 @@ public class DFSAdmin extends FsShell {
       } catch (Exception ex) {
       } catch (Exception ex) {
         System.err.println(cmd.substring(1) + ": "
         System.err.println(cmd.substring(1) + ": "
                            + ex.getLocalizedMessage());
                            + ex.getLocalizedMessage());
+        debugException = ex;
       }
       }
     } catch (Exception e) {
     } catch (Exception e) {
       exitCode = -1;
       exitCode = -1;
+      debugException = e;
       System.err.println(cmd.substring(1) + ": "
       System.err.println(cmd.substring(1) + ": "
                          + e.getLocalizedMessage());
                          + e.getLocalizedMessage());
-    } 
+    }
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("Exception encountered:", debugException);
+    }
     return exitCode;
     return exitCode;
   }
   }