You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by zj...@apache.org on 2015/02/16 13:03:33 UTC

tez git commit: TEZ-2038. TEZ-UI DAG is always running in tez-ui when the app is failed but no DAGFinishedEvent is logged (Prakash Ramachandran via zjffdu)

Repository: tez
Updated Branches:
  refs/heads/master a5a566591 -> b6cb7f81c


TEZ-2038. TEZ-UI DAG is always running in tez-ui when the app is failed but no DAGFinishedEvent is logged (Prakash Ramachandran via zjffdu)


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

Branch: refs/heads/master
Commit: b6cb7f81c8944e2948195c1fbb9b95faaa257f06
Parents: a5a5665
Author: Jeff Zhang <zj...@apache.org>
Authored: Mon Feb 16 20:03:18 2015 +0800
Committer: Jeff Zhang <zj...@apache.org>
Committed: Mon Feb 16 20:03:18 2015 +0800

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../app/scripts/controllers/dag_controller.js   | 34 +++++++++++---------
 .../app/scripts/controllers/dag_vertices.js     |  9 ++++++
 .../app/scripts/controllers/dags_controller.js  |  4 +++
 .../controllers/tez-app-dags-controller.js      | 19 +++++++++--
 .../scripts/controllers/vertex_controller.js    |  2 ++
 .../src/main/webapp/app/scripts/helpers/misc.js | 18 +++++++++++
 tez-ui/src/main/webapp/app/scripts/router.js    |  3 ++
 tez-ui/src/main/webapp/app/styles/colors.less   |  3 +-
 tez-ui/src/main/webapp/app/styles/main.less     |  7 +++-
 10 files changed, 80 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index fd20d20..6638e55 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -64,6 +64,7 @@ Release 0.6.1: Unreleased
 INCOMPATIBLE CHANGES
 
 ALL CHANGES:
+  TEZ-2038. TEZ-UI DAG is always running in tez-ui when the app is failed but no DAGFinishedEvent is logged.
   TEZ-2102. Tez UI: DAG view has hidden edges, dragging DAG by holding vertex causes unintended click.
   TEZ-2101. Tez UI: Issues on displaying a table.
   TEZ-2092. Tez UI history url handler injects spurious trailing slash.

http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
index b488841..210e673 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
@@ -21,17 +21,17 @@ App.DagController = Em.ObjectController.extend(App.Helpers.DisplayHelper, {
   pageTitle: 'Dag',
   loading: true,
 
-  updateLoading: function() {
+  loadAdditional: function(dag) {
     var that = this;
     var loaders = [];
-    var applicationId = this.get('applicationId');
-    if (this.get('status') === 'RUNNING') {
+    var applicationId = dag.get('applicationId');
+    if (dag.get('status') === 'RUNNING') {
       // update the progress info if available. this need not block the UI
-      var aminfoLoader = that.store.find('dagProgress', that.get('id'), {
+      var aminfoLoader = that.store.find('dagProgress', dag.get('id'), {
         appId: applicationId,
-        dagIdx: that.get('idx')
+        dagIdx: dag.get('idx')
       }).then(function(dagProgressInfo) {
-        that.set('progress', dagProgressInfo.get('progress'));
+        dag.set('progress', dagProgressInfo.get('progress'));
       }).catch(function (error) {
         Em.Logger.error("Failed to fetch dagProgress")
       });
@@ -39,24 +39,26 @@ App.DagController = Em.ObjectController.extend(App.Helpers.DisplayHelper, {
     }
     var appDetailLoader = this.store.find('appDetail', applicationId)
       .then(function(app){
-        that.set('appDetail', app);
+        dag.set('appDetail', app);
+        var appState = app.get('appState');
+        if (appState) {
+          dag.set('yarnAppState', appState);
+        }
+        dag.set('status', App.Helpers.misc.getRealStatus(dag.get('status'), app.get('appState'), app.get('finalAppStatus')));
       });
     var tezAppLoader = this.store.find('tezApp', 'tez_' + applicationId)
       .then(function(app){
-        that.set('tezApp', app);
+        dag.set('tezApp', app);
       });
 
-    var appDetailFetcher = that.store.find('appDetail', applicationId).then(function(appDetail) {
-      var appState = appDetail.get('appState');
-      if (appState) {
-        that.set('yarnAppState', appState);
-      }
-    });
-    loaders.push(appDetailFetcher);
+    loaders.push(appDetailLoader);
+
     Em.RSVP.allSettled(loaders).then(function(){
       that.set('loading', false);
     });
-  }.observes('content'),
+
+    return Em.RSVP.all(loaders);
+  },
 
   enableAppIdLink: function() {
     return !!(this.get('tezApp') && this.get('appDetail'));

http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js
index c26f83e..a373220 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js
@@ -49,6 +49,15 @@ App.DagVerticesController = Em.ObjectController.extend(App.PaginatedContentMixin
 
     var that = this;
         vertices = this.get('entities');
+
+    var dagStatus = this.get('controllers.dag.status');
+    if (App.Helpers.misc.isStatusInUnsuccessful(dagStatus)) {
+      vertices.filterBy('status', 'RUNNING')
+        .forEach(function(item) {
+          item.set('status', 'KILLED');
+        });
+    }
+
     var runningVerticesIdx = vertices
       .filterBy('status', 'RUNNING')
       .map(function(item) {

http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js
index fbe49ef..53d9eeb 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js
@@ -79,6 +79,10 @@ App.DagsController = Em.ObjectController.extend(App.PaginatedContentMixin, App.C
           fetcher = store.find('appDetail', appId);
           fetcher.then(function (app) {
             dag.set('appDetail', app);
+            if (dag.get('status') === 'RUNNING') {
+              dag.set('status', App.Helpers.misc.getRealStatus(dag.get('status'), app.get('appState'),
+                app.get('finalAppStatus')));
+            }
           });
           loaders.push(fetcher);
           //Load tezApp details

http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-dags-controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-dags-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-dags-controller.js
index 438ec29..79ae56b 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-dags-controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-dags-controller.js
@@ -57,14 +57,17 @@ App.TezAppDagsController = Em.ObjectController.extend(App.PaginatedContentMixin,
     that.set('loading', true);
 
     this.get('store').unloadAll(childEntityType);
-    this.get('store').findQuery(childEntityType, this.getFilterProperties()).then(function(entities){
+    this.get('store').findQuery(childEntityType, this.getFilterProperties())
+      .then(function(entities){
+
       that.set('entities', entities);
 
       var loaders = [];
       entities.forEach(function (dag) {
+        var applicationId = dag.get('applicationId');
         if (dag.get('status') === 'RUNNING') {
           amInfoFetcher = that.store.find('dagProgress', dag.get('id'), {
-            appId: dag.get('applicationId'),
+            appId: applicationId,
             dagIdx: dag.get('idx')
           }).then(function(dagProgressInfo) {
               dag.set('progress', dagProgressInfo.get('progress'));
@@ -73,7 +76,19 @@ App.TezAppDagsController = Em.ObjectController.extend(App.PaginatedContentMixin,
           });
           loaders.push(amInfoFetcher);
         }
+
+        var appDetailLoader = that.store.find('appDetail', applicationId)
+          .then(function(app){
+          dag.set('appDetail', app);
+          var appState = app.get('appState');
+          if (appState) {
+            dag.set('yarnAppState', appState);
+          }
+          dag.set('status', App.Helpers.misc.getRealStatus(dag.get('status'),
+            app.get('appState'), app.get('finalAppStatus')));
+        });
       });
+
       Em.RSVP.allSettled(loaders).then(function(){
         that.set('loading', false);
       });

http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
index 3c56690..f6893b9 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
@@ -48,6 +48,8 @@ App.VertexController = Em.ObjectController.extend(App.Helpers.DisplayHelper, {
       if (appState) {
         that.set('yarnAppState', appState);
       }
+      that.set('status', App.Helpers.misc.getRealStatus(that.get('status'), appDetail.get('appState'),
+        appDetail.get('finalAppStatus')));
     });
     loaders.push(appDetailFetcher);
     Em.RSVP.allSettled(loaders).then(function(){

http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/tez-ui/src/main/webapp/app/scripts/helpers/misc.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/helpers/misc.js b/tez-ui/src/main/webapp/app/scripts/helpers/misc.js
index 50663a8..4872881 100644
--- a/tez-ui/src/main/webapp/app/scripts/helpers/misc.js
+++ b/tez-ui/src/main/webapp/app/scripts/helpers/misc.js
@@ -41,11 +41,25 @@ App.Helpers.misc = {
         }
 
         return 'success';
+      case 'UNDEFINED':
+        return 'unknown';
       default:
         return 'submitted';
     }
   },
 
+  getRealStatus: function(entityState, yarnAppState, yarnAppFinalState) {
+    if (entityState != 'RUNNING' || (yarnAppState != 'FINISHED' && yarnAppState != 'KILLED' && yarnAppState != 'FAILED')) {
+      return entityState;
+    }
+
+    if (yarnAppState == 'KILLED' || yarnAppState == 'FAILED') {
+      return yarnAppState;
+    }
+
+    return yarnFinalState;
+  },
+
 	getCounterValueForDag: function(counterGroups, dagID, counterGroupName, counterName) {
 		if (!counterGroups) {
 			return 0;
@@ -76,6 +90,10 @@ App.Helpers.misc = {
     return $.inArray(status, ['RUNNING', 'SUCCEEDED', 'FAILED', 'KILLED']) != -1;
   },
 
+  isStatusInUnsuccessful: function(status) {
+    return $.inArray(status, ['FAILED', 'KILLED', 'UNDEFINED']) != -1;
+  },
+
   /**
    * To trim a complete class path with namespace to the class name.
    */

http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/tez-ui/src/main/webapp/app/scripts/router.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/router.js b/tez-ui/src/main/webapp/app/scripts/router.js
index b1f750b..efb52d7 100644
--- a/tez-ui/src/main/webapp/app/scripts/router.js
+++ b/tez-ui/src/main/webapp/app/scripts/router.js
@@ -141,6 +141,9 @@ App.DagRoute = Em.Route.extend({
   model: function(params) {
     return this.store.find('dag', params.dag_id);
   },
+  afterModel: function(model) {
+    return this.controllerFor('dag').loadAdditional(model);
+  },
   setupController: setupControllerFactory('Dag: %@ (%@)', 'name', 'id')
 });
 

http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/tez-ui/src/main/webapp/app/styles/colors.less
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/styles/colors.less b/tez-ui/src/main/webapp/app/styles/colors.less
index b8e3b6e..0fee7c0 100644
--- a/tez-ui/src/main/webapp/app/styles/colors.less
+++ b/tez-ui/src/main/webapp/app/styles/colors.less
@@ -33,4 +33,5 @@
 
 @success-color: limegreen;
 @error-color: crimson;
-@warning-color: orange;
\ No newline at end of file
+@warning-color: orange;
+@unknown-color: crimson;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tez/blob/b6cb7f81/tez-ui/src/main/webapp/app/styles/main.less
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/styles/main.less b/tez-ui/src/main/webapp/app/styles/main.less
index 161c8f3..fef8c00 100644
--- a/tez-ui/src/main/webapp/app/styles/main.less
+++ b/tez-ui/src/main/webapp/app/styles/main.less
@@ -338,13 +338,18 @@ body, html, body > .ember-view {
 
   &.killed {
     .fa-icon(exclamation-circle);
-    color: @warning-color;
+    color: @error-color;
   }
 
   &.warning {
     .fa-icon(exclamation-triangle);
     color: @warning-color;
   }
+
+  &.unknown {
+    .fa-icon(exclamation);
+    color: @unknown-color;
+  }
 }
 
 .fa-action {