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.