ACCUMULO-2404 Better error logging in start.Main

Propogate original exceptions instead of the wrapping
InvocationTargetException when possible, when starting processes
through o.a.a.start.Main


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/1543d65f
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/1543d65f
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/1543d65f

Branch: refs/heads/master
Commit: 1543d65fb2ff54ede7785f591f30f3764622b4df
Parents: 2829426
Author: Mike Drob <md...@cloudera.com>
Authored: Tue Feb 25 11:41:51 2014 -0500
Committer: Mike Drob <md...@cloudera.com>
Committed: Tue Feb 25 11:41:51 2014 -0500

----------------------------------------------------------------------
 .../java/org/apache/accumulo/start/Main.java    | 34 +++++++++++++++-----
 1 file changed, 26 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/1543d65f/src/start/src/main/java/org/apache/accumulo/start/Main.java
----------------------------------------------------------------------
diff --git a/src/start/src/main/java/org/apache/accumulo/start/Main.java 
b/src/start/src/main/java/org/apache/accumulo/start/Main.java
index 53c31a5..f955dd8 100644
--- a/src/start/src/main/java/org/apache/accumulo/start/Main.java
+++ b/src/start/src/main/java/org/apache/accumulo/start/Main.java
@@ -16,14 +16,15 @@
  */
 package org.apache.accumulo.start;
 
-import org.apache.accumulo.start.classloader.AccumuloClassLoader;
-
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 
+import org.apache.accumulo.start.classloader.AccumuloClassLoader;
+
 public class Main {
-  
-  public static void main(String[] args) throws Exception {
+
+  public static void main(String[] args) {
     Runnable r = null;
     
     try {
@@ -89,10 +90,15 @@ public class Main {
         public void run() {
           try {
             finalMain.invoke(null, thisIsJustOneArgument);
+          } catch (InvocationTargetException e) {
+            if (e.getCause() != null) {
+              die(e.getCause());
+            } else {
+              // Should never happen, but check anyway.
+              die(e);
+            }
           } catch (Exception e) {
-            System.err.println("Thread \"" + Thread.currentThread().getName() 
+ "\" died " + e.getMessage());
-            e.printStackTrace(System.err);
-            System.exit(1);
+            die(e);
           }
         }
       };
@@ -105,7 +111,19 @@ public class Main {
       t.printStackTrace(System.err);
     }
   }
-  
+
+  /**
+   * Print a stack trace to stderr and exit with a non-zero status.
+   *
+   * @param t
+   *          The {@link Throwable} containing a stack trace to print.
+   */
+  private static void die(Throwable t) {
+    System.err.println("Thread \"" + Thread.currentThread().getName() + "\" 
died " + t.getMessage());
+    t.printStackTrace(System.err);
+    System.exit(1);
+  }
+
   private static void printUsage() {
     System.out.println("accumulo init | master | tserver | logger | monitor | 
shell | admin | gc | classpath | <accumulo class> args");
   }

Reply via email to