From 34b9bc4e7f78983a99b187ea2da0fc2cd8100ca1 Mon Sep 17 00:00:00 2001 From: Aaron Myers Date: Wed, 9 May 2012 18:21:38 +0000 Subject: [PATCH] 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 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../org/apache/hadoop/hdfs/tools/DFSAdmin.java | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index edf429abebf..bdd4e1f4585 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/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 block management. (John George via szetszwo) + HDFS-3390. DFSAdmin should print full stack traces of errors when DEBUG + logging is enabled. (atm) + OPTIMIZATIONS HDFS-2477. Optimize computing the diff between a block report and the diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DFSAdmin.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DFSAdmin.java index 5b572362411..c7c206fcb73 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DFSAdmin.java +++ b/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.TreeSet; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.CommonConfigurationKeys; @@ -64,9 +66,11 @@ import org.apache.hadoop.util.ToolRunner; @InterfaceAudience.Private public class DFSAdmin extends FsShell { - static{ + static { HdfsConfiguration.init(); } + + private static final Log LOG = LogFactory.getLog(DFSAdmin.class); /** * An abstract class for the execution of a file system command @@ -1089,6 +1093,7 @@ public class DFSAdmin extends FsShell { return exitCode; } + Exception debugException = null; exitCode = 0; try { if ("-report".equals(cmd)) { @@ -1143,6 +1148,7 @@ public class DFSAdmin extends FsShell { printUsage(""); } } catch (IllegalArgumentException arge) { + debugException = arge; exitCode = -1; System.err.println(cmd.substring(1) + ": " + arge.getLocalizedMessage()); printUsage(cmd); @@ -1151,6 +1157,7 @@ public class DFSAdmin extends FsShell { // This is a error returned by hadoop server. Print // out the first line of the error message, ignore the stack trace. exitCode = -1; + debugException = e; try { String[] content; content = e.getLocalizedMessage().split("\n"); @@ -1159,12 +1166,17 @@ public class DFSAdmin extends FsShell { } catch (Exception ex) { System.err.println(cmd.substring(1) + ": " + ex.getLocalizedMessage()); + debugException = ex; } } catch (Exception e) { exitCode = -1; + debugException = e; System.err.println(cmd.substring(1) + ": " + e.getLocalizedMessage()); - } + } + if (LOG.isDebugEnabled()) { + LOG.debug("Exception encountered:", debugException); + } return exitCode; }