Browse Source

HDFS-3666. Plumb more exception messages to terminate. Contributed by Eli Collins

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1362270 13f79535-47bb-0310-9956-ffa450edef68
Eli Collins 13 years ago
parent
commit
527933f4f3

+ 11 - 1
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ExitUtil.java

@@ -84,10 +84,20 @@ public final class ExitUtil {
     System.exit(status);
   }
 
+  /**
+   * Like {@link terminate(int, String)} but takes an exception to
+   * @param status
+   * @param t Exception
+   * @throws ExitException if System.exit is disabled for test purposes
+   */
+  public static void terminate(int status, Throwable t) throws ExitException {
+    terminate(status, t.getMessage());
+  }
+
   /**
    * Like {@link terminate(int, String)} without a message.
    * @param status
-   * @throws ExitException
+   * @throws ExitException if System.exit is disabled for test purposes
    */
   public static void terminate(int status) throws ExitException {
     terminate(status, "ExitException");

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

@@ -341,6 +341,8 @@ Branch-2 ( Unreleased changes )
 
     HDFS-3665. Add a test for renaming across file systems via a symlink. (eli)
 
+    HDFS-3666. Plumb more exception messages to terminate. (eli)
+
   OPTIMIZATIONS
 
     HDFS-2982. Startup performance suffers when there are many edit log

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java

@@ -2967,7 +2967,7 @@ assert storedBlock.findDatanode(dn) < 0 : "Block " + block
           break;
         } catch (Throwable t) {
           LOG.fatal("ReplicationMonitor thread received Runtime exception. ", t);
-          terminate(1);
+          terminate(1, t);
         }
       }
     }

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java

@@ -1704,7 +1704,7 @@ public class DataNode extends Configured
         datanode.join();
     } catch (Throwable e) {
       LOG.fatal("Exception in secureMain", e);
-      terminate(1);
+      terminate(1, e);
     } finally {
       // We need to terminate the process here because either shutdown was called
       // or some disk related conditions like volumes tolerated or volumes required

+ 3 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java

@@ -545,8 +545,9 @@ public class FSEditLog  {
             editLogStream.setReadyToFlush();
           } catch (IOException e) {
             final String msg =
-                "Could not sync enough journals to persistent storage. "
-                + "Unsynced transactions: " + (txid - synctxid);
+                "Could not sync enough journals to persistent storage " +
+                "due to " + e.getMessage() + ". " +
+                "Unsynced transactions: " + (txid - synctxid);
             LOG.fatal(msg, new Exception());
             terminate(1, msg);
           }

+ 2 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java

@@ -1195,7 +1195,7 @@ public class NameNode {
         namenode.join();
     } catch (Throwable e) {
       LOG.fatal("Exception in namenode join", e);
-      terminate(1);
+      terminate(1, e);
     }
   }
 
@@ -1283,7 +1283,7 @@ public class NameNode {
     } catch (Throwable ignored) {
       // This is unlikely to happen, but there's nothing we can do if it does.
     }
-    terminate(1, t.getMessage());
+    terminate(1, t);
   }
 
   /**

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SecondaryNameNode.java

@@ -330,7 +330,7 @@ public class SecondaryNameNode implements Runnable {
       } catch (Throwable e) {
         LOG.fatal("Throwable Exception in doCheckpoint", e);
         e.printStackTrace();
-        terminate(1);
+        terminate(1, e);
       }
     }
   }

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/EditLogTailer.java

@@ -316,7 +316,7 @@ public class EditLogTailer {
         } catch (Throwable t) {
           LOG.fatal("Unknown error encountered while tailing edits. " +
               "Shutting down standby NN.", t);
-          terminate(1, t.getMessage());
+          terminate(1, t);
         }
 
         try {

+ 4 - 2
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestEditLogJournalFailures.java

@@ -125,7 +125,8 @@ public class TestEditLogJournalFailures {
     } catch (RemoteException re) {
       assertTrue(re.getClassName().contains("ExitException"));
       GenericTestUtils.assertExceptionContains(
-          "Could not sync enough journals to persistent storage. " +
+          "Could not sync enough journals to persistent storage due to " +
+          "No journals available to flush. " +
           "Unsynced transactions: 1", re);
     }
   }
@@ -227,7 +228,8 @@ public class TestEditLogJournalFailures {
     } catch (RemoteException re) {
       assertTrue(re.getClassName().contains("ExitException"));
       GenericTestUtils.assertExceptionContains(
-          "Could not sync enough journals to persistent storage. " +
+          "Could not sync enough journals to persistent storage due to " +
+          "setReadyToFlush failed for too many journals. " +
           "Unsynced transactions: 1", re);
     }
   }