Selaa lähdekoodia

YARN-4422. Generic AHS sometimes doesn't show started, node, or logs on App page (Eric Payne via jeagles)

Jonathan Eagles 9 vuotta sitten
vanhempi
commit
4ff973f96a

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

@@ -1149,6 +1149,9 @@ Release 2.7.3 - UNRELEASED
     (with application having id > 9999) (Mohammad Shahid Khan & Varun Saxena
     via jianhe)
 
+    YARN-4422. Generic AHS sometimes doesn't show started, node, or logs on App page
+    (Eric Payne via jeagles)
+
 Release 2.7.2 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 7 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerOnTimelineStore.java

@@ -488,6 +488,13 @@ public class ApplicationHistoryManagerOnTimelineStore extends AbstractService
                     AppAttemptMetricsConstants.STATE_EVENT_INFO)
                     .toString());
           }
+          if (eventInfo
+              .containsKey(AppAttemptMetricsConstants.MASTER_CONTAINER_EVENT_INFO)) {
+            amContainerId =
+                ConverterUtils.toContainerId(eventInfo.get(
+                    AppAttemptMetricsConstants.MASTER_CONTAINER_EVENT_INFO)
+                    .toString());
+          }
         }
       }
     }

+ 9 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/metrics/AppAttemptFinishedEvent.java

@@ -19,6 +19,7 @@
 package org.apache.hadoop.yarn.server.resourcemanager.metrics;
 
 import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
+import org.apache.hadoop.yarn.api.records.ContainerId;
 import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
 import org.apache.hadoop.yarn.api.records.YarnApplicationAttemptState;
 
@@ -31,6 +32,7 @@ public class AppAttemptFinishedEvent extends
   private String diagnosticsInfo;
   private FinalApplicationStatus appStatus;
   private YarnApplicationAttemptState state;
+  private ContainerId masterContainerId;
 
   public AppAttemptFinishedEvent(
       ApplicationAttemptId appAttemptId,
@@ -39,7 +41,8 @@ public class AppAttemptFinishedEvent extends
       String diagnosticsInfo,
       FinalApplicationStatus appStatus,
       YarnApplicationAttemptState state,
-      long finishedTime) {
+      long finishedTime,
+      ContainerId masterContainerId) {
     super(SystemMetricsEventType.APP_ATTEMPT_FINISHED, finishedTime);
     this.appAttemptId = appAttemptId;
     // This is the tracking URL after the application attempt is finished
@@ -48,6 +51,7 @@ public class AppAttemptFinishedEvent extends
     this.diagnosticsInfo = diagnosticsInfo;
     this.appStatus = appStatus;
     this.state = state;
+    this.masterContainerId = masterContainerId;
   }
 
   @Override
@@ -79,4 +83,8 @@ public class AppAttemptFinishedEvent extends
     return state;
   }
 
+  public ContainerId getMasterContainerId() {
+    return masterContainerId;
+  }
+
 }

+ 5 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/metrics/SystemMetricsPublisher.java

@@ -186,7 +186,8 @@ public class SystemMetricsPublisher extends CompositeService {
               // based on app state if it doesn't exist
               app.getFinalApplicationStatus(),
               RMServerUtils.createApplicationAttemptState(appAttemtpState),
-              finishedTime));
+              finishedTime,
+              appAttempt.getMasterContainer().getId()));
     }
   }
 
@@ -416,6 +417,9 @@ public class SystemMetricsPublisher extends CompositeService {
         event.getFinalApplicationStatus().toString());
     eventInfo.put(AppAttemptMetricsConstants.STATE_EVENT_INFO,
         event.getYarnApplicationAttemptState().toString());
+    eventInfo.put(
+        AppAttemptMetricsConstants.MASTER_CONTAINER_EVENT_INFO,
+        event.getMasterContainerId().toString());
     tEvent.setEventInfo(eventInfo);
     entity.addEvent(tEvent);
     putEntity(entity);