Browse Source

YARN-2377. Localization exception stack traces are not passed as diagnostic info. Contributed by Gera Shegalov

Jason Lowe 10 years ago
parent
commit
a56ea01002

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

@@ -633,6 +633,9 @@ Release 2.6.0 - UNRELEASED
     YARN-2651. Spun off LogRollingInterval from LogAggregationContext. (Xuan Gong
     via zjshen)
 
+    YARN-2377. Localization exception stack traces are not passed as
+    diagnostic info (Gera Shegalov via jlowe)
+
 Release 2.5.1 - 2014-09-05
 
   INCOMPATIBLE CHANGES

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/SerializedException.java

@@ -90,4 +90,22 @@ public abstract class SerializedException {
   @Private
   @Unstable
   public abstract Throwable deSerialize();
+
+  private void stringify(StringBuilder sb) {
+    sb.append(getMessage())
+        .append("\n")
+        .append(getRemoteTrace());
+    final SerializedException cause = getCause();
+    if (cause != null) {
+      sb.append("Caused by: ");
+      cause.stringify(sb);
+    }
+  }
+
+  @Override
+  public String toString() {
+    final StringBuilder sb = new StringBuilder(128);
+    stringify(sb);
+    return sb.toString();
+  }
 }

+ 3 - 3
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/ResourceLocalizationService.java

@@ -1008,12 +1008,12 @@ public class ResourceLocalizationService extends CompositeService
             response.setLocalizerAction(LocalizerAction.LIVE);
             break;
           case FETCH_FAILURE:
-            LOG.info("DEBUG: FAILED " + req 
-                + ", " + stat.getException().getMessage());
+            final String diagnostics = stat.getException().toString();
+            LOG.warn(req + " failed: " + diagnostics);
             response.setLocalizerAction(LocalizerAction.DIE);
             getLocalResourcesTracker(req.getVisibility(), user, applicationId)
               .handle(new ResourceFailedLocalizationEvent(
-                  req, stat.getException().getMessage()));
+                  req, diagnostics));
 
             // unlocking the resource and removing it from scheduled resource
             // list