You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2018/05/30 14:22:31 UTC

[ambari] branch trunk updated: AMBARI-23978 Express Upgrade: Clicking on upgrade item shows no tasks on large clusters

This is an automated email from the ASF dual-hosted git repository.

atkach pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new e9ef947  AMBARI-23978 Express Upgrade: Clicking on upgrade item shows no tasks on large clusters
e9ef947 is described below

commit e9ef947772feb3c0191c1e36e89d20e31c76f349
Author: Andrii Tkach <at...@apache.org>
AuthorDate: Wed May 30 13:28:09 2018 +0300

    AMBARI-23978 Express Upgrade: Clicking on upgrade item shows no tasks on large clusters
---
 .../main/admin/stack_and_upgrade_controller.js     | 36 ++++++++++++++-
 ambari-web/app/models/upgrade_entity.js            |  5 ++
 .../main/admin/stack_upgrade/upgrade_group.hbs     |  2 +-
 .../main/admin/stack_upgrade/upgrade_task.hbs      |  4 +-
 ambari-web/app/utils/ajax/ajax.js                  | 11 ++++-
 .../main/admin/stack_upgrade/upgrade_group_view.js |  8 ++--
 .../main/admin/stack_upgrade/upgrade_task_view.js  | 39 ++++++++++++++++
 .../admin/stack_and_upgrade_controller_test.js     | 53 ++++++++++++++++++++++
 .../admin/stack_upgrade/upgrade_task_view_test.js  | 34 ++++++++++++++
 9 files changed, 183 insertions(+), 9 deletions(-)

diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index f538f21..0a62f50 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -648,13 +648,18 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
               data.tasks.forEach(function (task) {
                 var currentTask = item.get('tasks').findProperty('id', task.Tasks.id);
                 this.get('taskDetailsProperties').forEach(function (property) {
-                  currentTask.set(property, task.Tasks[property]);
+                  if (!Em.isNone(task.Tasks[property])) {
+                    currentTask.set(property, task.Tasks[property]);
+                  }
                 }, this);
               }, this);
             } else {
               var tasks = [];
               data.tasks.forEach(function (task) {
-                tasks.pushObject(App.upgradeEntity.create({type: 'TASK'}, task.Tasks));
+                tasks.pushObject(App.upgradeEntity.create({
+                  type: 'TASK',
+                  group_id: data.UpgradeItem.group_id
+                }, task.Tasks));
               });
               item.set('tasks', tasks);
             }
@@ -665,6 +670,33 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     }, this);
   },
 
+
+  /**
+   * request Upgrade Task
+   * @param {Em.Object} task
+   * @return {$.ajax}
+   */
+  getUpgradeTask: function (task) {
+    return App.ajax.send({
+      name: 'admin.upgrade.upgrade_task',
+      sender: this,
+      data: {
+        upgradeId: task.get('request_id'),
+        groupId: task.get('group_id'),
+        stageId: task.get('stage_id'),
+        taskId: task.get('id'),
+        task: task
+      },
+      success: 'getUpgradeTaskSuccessCallback'
+    });
+  },
+
+  getUpgradeTaskSuccessCallback: function (data, xhr, params) {
+    this.get('taskDetailsProperties').forEach(function (property) {
+      params.task.set(property, data.Tasks[property]);
+    }, this);
+  },
+
   /**
    * Failures info may includes service_check and host_component failures. These two types should be displayed separately.
    */
diff --git a/ambari-web/app/models/upgrade_entity.js b/ambari-web/app/models/upgrade_entity.js
index 7df1149..15332a8 100644
--- a/ambari-web/app/models/upgrade_entity.js
+++ b/ambari-web/app/models/upgrade_entity.js
@@ -56,6 +56,11 @@ App.upgradeEntity = Em.Object.extend({
   isRunning: Em.computed.existsIn('status', ['IN_PROGRESS']),
 
   /**
+   * @type {boolean}
+   */
+  isCompleted: Em.computed.existsIn('status', ['COMPLETED', 'FAILED', 'TIMEDOUT', 'ABORTED']),
+
+  /**
    * @type {number}
    */
   progress: function () {
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
index 00cde9f..b1e6404 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
@@ -55,7 +55,7 @@
               }}
             <div class="percent pull-right">
                 <span>{{item.progress}}%</span>
-            </div
+            </div>
           </div>
         {{/if}}
       </div>
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
index 36450a2..8c0fd42 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
@@ -19,13 +19,13 @@
 {{#unless view.outsideView}}
   <div {{bindAttr class="view.content.isActive::not-active-link"}}>
       {{statusIcon view.content.status}}
-    <a href="#" {{action toggleExpanded view.content view.tasks target="view.parentView"}}>
+    <a href="#" {{action toggleExpanded view.content target="view"}}>
         {{view.content.command_detail}}
     </a>
   </div>
 {{/unless}}
 {{#if view.showContent}}
-  {{#if view.content}}
+  {{#if view.isContentLoaded}}
     <div class="task-details task-detail-info">
       <ul class="nav nav-tabs">
         <li class="active"><a data-toggle="tab" {{bindAttr href="view.logTabIdLink"}}>{{t common.stdout}}</a></li>
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 5fdd205..a0eeb3c 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1695,10 +1695,19 @@ var urls = {
     'real': '/clusters/{clusterName}/upgrades/{upgradeId}/upgrade_groups/{groupId}/upgrade_items/{stageId}?fields=' +
     'UpgradeItem/group_id,' +
     'UpgradeItem/stage_id,' +
-    'tasks/Tasks/*&' +
+    'tasks/Tasks/command_detail,' +
+    'tasks/Tasks/host_name,' +
+    'tasks/Tasks/role,' +
+    'tasks/Tasks/request_id,' +
+    'tasks/Tasks/stage_id,' +
+    'tasks/Tasks/status&' +
     'minimal_response=true',
     'mock': '/data/stack_versions/upgrade_item.json'
   },
+  'admin.upgrade.upgrade_task': {
+    'real': '/clusters/{clusterName}/upgrades/{upgradeId}/upgrade_groups/{groupId}/upgrade_items/{stageId}/tasks/{taskId}',
+    'mock': ''
+  },
   'admin.upgrade.service_checks': {
     'real': '/clusters/{clusterName}/upgrades/{upgradeId}/upgrade_groups?upgrade_items/UpgradeItem/status=COMPLETED&upgrade_items/tasks/Tasks/status.in(FAILED,ABORTED,TIMEDOUT)&upgrade_items/tasks/Tasks/command=SERVICE_CHECK&fields=upgrade_items/tasks/Tasks/command_detail,tasks/Tasks/ops_display_name,upgrade_items/tasks/Tasks/status&minimal_response=true'
   },
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js
index c5ab97a..071770d 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js
@@ -75,9 +75,11 @@ App.upgradeGroupView = Em.View.extend({
 
     if (item && item.get('isExpanded')) {
       this.get('controller').getUpgradeItem(item).complete(function () {
-        self.set('timer', setTimeout(function () {
-          self.doPolling(item);
-        }, App.bgOperationsUpdateInterval));
+        if (!item.get('isCompleted')) {
+          self.set('timer', setTimeout(function () {
+            self.doPolling(item);
+          }, App.bgOperationsUpdateInterval));
+        }
       });
     } else {
       clearTimeout(this.get('timer'));
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js
index 05f7e6f..dee2541 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js
@@ -75,6 +75,45 @@ App.upgradeTaskView = Em.View.extend({
   errorTabIdLInk: Em.computed.format('#{0}','errorTabId'),
 
   /**
+   * @type {boolean}
+   */
+  isContentLoaded: false,
+
+  toggleExpanded: function (event) {
+    var isExpanded = event.context.get('isExpanded');
+    event.context.toggleProperty('isExpanded', !isExpanded);
+    if (!isExpanded) {
+      event.context.set('isContentLoaded', false);
+      this.doPolling(event.context);
+    }
+  },
+
+  /**
+   *
+   * @param task
+   */
+  doPolling: function (task) {
+    var self = this;
+
+    if (task && task.get('isExpanded')) {
+      this.get('controller').getUpgradeTask(task).complete(function () {
+        self.set('isContentLoaded', true);
+        if (!task.get('isCompleted')) {
+          self.set('timer', setTimeout(function () {
+            self.doPolling(task);
+          }, App.bgOperationsUpdateInterval));
+        }
+      });
+    } else {
+      clearTimeout(this.get('timer'));
+    }
+  },
+
+  willDestroyElement: function () {
+    clearTimeout(this.get('timer'));
+  },
+
+  /**
    * open error log in textarea to give ability to cope content
    * @param {object} event
    */
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index 9cd79fe..019977c 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -327,6 +327,59 @@ describe('App.MainAdminStackAndUpgradeController', function() {
     });
   });
 
+  describe("#getUpgradeTask()", function() {
+
+    it("default callback", function() {
+      var task = Em.Object.create({
+        request_id: 1,
+        group_id: 2,
+        stage_id: 3,
+        id: 4
+      });
+      controller.getUpgradeTask(task);
+      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgrade_task');
+      expect(args[0]).to.exists;
+      expect(args[0].sender).to.be.eql(controller);
+      expect(args[0].success).to.be.equal('getUpgradeTaskSuccessCallback');
+      expect(args[0].data).to.be.eql({
+        upgradeId: 1,
+        groupId: 2,
+        stageId: 3,
+        taskId: 4,
+        task: task
+      });
+    });
+  });
+
+  describe('#getUpgradeTaskSuccessCallback', function() {
+
+    it('should update volatile properties', function() {
+      var data = {
+        Tasks: {
+          status: 'IN_PROGRESS',
+          id: 1,
+          stderr: 'Error',
+          error_log: '',
+          host_name: 'host1',
+          output_log: '',
+          stdout: ''
+        }
+      };
+      var params = {
+        task: Em.Object.create()
+      };
+      controller.getUpgradeTaskSuccessCallback(data, {}, params);
+      expect(params.task).to.be.eql(Em.Object.create({
+        status: 'IN_PROGRESS',
+        stderr: 'Error',
+        error_log: '',
+        host_name: 'host1',
+        output_log: '',
+        stdout: ''
+      }))
+    });
+  });
+
   describe("#openUpgradeDialog()", function () {
     var mock = {
       observer: Em.K
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_task_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_task_view_test.js
index 5c74d38..d525031 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_task_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_task_view_test.js
@@ -23,6 +23,11 @@ require('views/main/admin/stack_upgrade/upgrade_task_view');
 describe('App.upgradeTaskView', function () {
   var view = App.upgradeTaskView.create({
     content: Em.Object.create(),
+    controller: Em.Object.create({
+      getUpgradeTask: sinon.stub().returns({
+        complete: Em.clb
+      })
+    }),
     taskDetailsProperties: ['prop1']
   });
   view.removeObserver('content.isExpanded', view, 'doPolling');
@@ -169,4 +174,33 @@ describe('App.upgradeTaskView', function () {
     });
   });
 
+  describe('#toggleExpanded', function() {
+    beforeEach(function() {
+      sinon.stub(view, 'doPolling');
+    });
+    afterEach(function() {
+      view.doPolling.restore();
+    });
+
+    it('doPolling should be called', function() {
+      var event = {
+        context: Em.Object.create({
+          isExpanded: false
+        })
+      };
+      view.toggleExpanded(event);
+      expect(event.context.get('isExpanded')).to.be.true;
+      expect(view.doPolling.calledOnce).to.be.true;
+    });
+  });
+
+  describe('#doPolling', function() {
+
+    it('getUpgradeTask should be called', function() {
+      view.doPolling(Em.Object.create({isExpanded: true}));
+      expect(view.get('controller').getUpgradeTask.calledOnce).to.be.true;
+      expect(view.get('isContentLoaded')).to.be.true;
+    });
+  });
+
 });

-- 
To stop receiving notification emails like this one, please contact
atkach@apache.org.