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 2015/03/01 11:48:17 UTC
ambari git commit: AMBARI-9855 Rolling Upgrade: UI stuck in loading.
(atkach)
Repository: ambari
Updated Branches:
refs/heads/trunk 3ef3607a1 -> d153d4b61
AMBARI-9855 Rolling Upgrade: UI stuck in loading. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d153d4b6
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d153d4b6
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d153d4b6
Branch: refs/heads/trunk
Commit: d153d4b61edf2f00af026d5be55fb7772b6dbcd6
Parents: 3ef3607
Author: Andrii Tkach <at...@hortonworks.com>
Authored: Sun Mar 1 11:51:36 2015 +0200
Committer: Andrii Tkach <at...@hortonworks.com>
Committed: Sun Mar 1 12:47:40 2015 +0200
----------------------------------------------------------------------
.../data/stack_versions/upgrade_item.json | 32 ++++++
.../main/admin/stack_and_upgrade_controller.js | 9 --
.../main/admin/stack_upgrade/upgrade_group.hbs | 14 ++-
ambari-web/app/utils/ajax/ajax.js | 28 +++--
.../admin/stack_upgrade/upgrade_group_view.js | 78 +++++++++++++
.../admin/stack_upgrade/upgrade_task_view.js | 67 -----------
.../main/admin/stack_upgrade/versions_view.js | 2 +-
.../admin/stack_and_upgrade_controller_test.js | 41 +------
.../stack_upgrade/upgrade_task_view_test.js | 115 -------------------
9 files changed, 145 insertions(+), 241 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/d153d4b6/ambari-web/app/assets/data/stack_versions/upgrade_item.json
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/data/stack_versions/upgrade_item.json b/ambari-web/app/assets/data/stack_versions/upgrade_item.json
new file mode 100644
index 0000000..4d55272
--- /dev/null
+++ b/ambari-web/app/assets/data/stack_versions/upgrade_item.json
@@ -0,0 +1,32 @@
+{
+ "UpgradeItem" : {
+ "cluster_name" : "c1",
+ "group_id" : 1,
+ "request_id" : 5,
+ "stage_id" : 1
+ },
+ "tasks" : [
+ {
+ "Tasks" : {
+ "attempt_cnt" : 1,
+ "cluster_name" : "c1",
+ "command" : "EXECUTE",
+ "command_detail" : "Before continuing, please backup the Hive Metastore database located on the following host(s): perf-400-25feb-b-5.c.pramod-thangali.internal. During the upgrade process, you will be instructed when it is time to upgrade the Hive Metastore database. ...",
+ "custom_command_name" : "org.apache.ambari.server.serveraction.upgrades.ManualStageAction",
+ "end_time" : -1,
+ "error_log" : "/var/lib/ambari-agent/data/errors-15578.txt",
+ "exit_code" : 0,
+ "host_name" : "perf-400-25feb-c-193.c.pramod-thangali.internal",
+ "id" : 15578,
+ "output_log" : "/var/lib/ambari-agent/data/output-15578.txt",
+ "request_id" : 5,
+ "role" : "AMBARI_SERVER_ACTION",
+ "stage_id" : 1,
+ "start_time" : 1424961934089,
+ "status" : "COMPLETED",
+ "stderr" : "",
+ "stdout" : ""
+ }
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/d153d4b6/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
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 ca13cec..5daa092 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
@@ -209,9 +209,6 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
groupsMap[newGroup.UpgradeGroup.group_id] = newGroup.UpgradeGroup;
newGroup.upgrade_items.forEach(function (item) {
itemsMap[item.UpgradeItem.stage_id] = item.UpgradeItem;
- item.tasks.forEach(function (task) {
- tasksMap[task.Tasks.id] = task.Tasks;
- });
})
});
@@ -222,9 +219,6 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
oldGroup.upgradeItems.forEach(function (item) {
item.set('status', itemsMap[item.get('stage_id')].status);
item.set('progress_percent', itemsMap[item.get('stage_id')].progress_percent);
- item.tasks.forEach(function (task) {
- task.set('status', tasksMap[task.get('id')].status);
- });
})
});
oldData.set('Upgrade', newData.Upgrade);
@@ -247,9 +241,6 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
newGroup.upgrade_items.forEach(function (item) {
var oldItem = App.upgradeEntity.create({type: 'ITEM'}, item.UpgradeItem);
var tasks = [];
- item.tasks.forEach(function (task) {
- tasks.pushObject(App.upgradeEntity.create({type: 'TASK'}, task.Tasks));
- });
oldItem.set('tasks', tasks);
upgradeItems.pushObject(oldItem);
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/d153d4b6/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
----------------------------------------------------------------------
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 8372088..e4e8149 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
@@ -60,12 +60,16 @@
{{/if}}
{{#if item.isExpanded}}
+ {{#if item.isTasksLoaded}}
{{! List of Tasks}}
- <div class="task-list margin-bottom-5">
- {{#each task in item.tasks}}
- {{view App.upgradeTaskView contentBinding="task" tasksBinding="item.tasks"}}
- {{/each}}
- </div>
+ <div class="task-list margin-bottom-5">
+ {{#each task in item.tasks}}
+ {{view App.upgradeTaskView contentBinding="task" tasksBinding="item.tasks"}}
+ {{/each}}
+ </div>
+ {{else}}
+ <div class="spinner"></div>
+ {{/if}}
{{/if}}
{{/each}}
</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/d153d4b6/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index e492d43..50f73d8 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1362,20 +1362,32 @@ var urls = {
'mock': '/data/wizard/{mock}'
},
'admin.upgrade.data': {
- 'real': '/clusters/{clusterName}/upgrades/{id}?fields=Upgrade,upgrade_groups/UpgradeGroup,upgrade_groups/upgrade_items/*,' +
- 'upgrade_groups/upgrade_items/tasks/Tasks/id,' +
- 'upgrade_groups/upgrade_items/tasks/Tasks/command_detail,' +
- 'upgrade_groups/upgrade_items/tasks/Tasks/request_id,' +
- 'upgrade_groups/upgrade_items/tasks/Tasks/status',
+ 'real': '/clusters/{clusterName}/upgrades/{id}?upgrade_groups/UpgradeGroup/status!=PENDING&fields=' +
+ 'Upgrade/progress_percent,Upgrade/request_context,Upgrade/request_status,Upgrade/direction,' +
+ 'upgrade_groups/UpgradeGroup,' +
+ 'upgrade_groups/upgrade_items/UpgradeItem/status,' +
+ 'upgrade_groups/upgrade_items/UpgradeItem/context,' +
+ 'upgrade_groups/upgrade_items/UpgradeItem/group_id,' +
+ 'upgrade_groups/upgrade_items/UpgradeItem/progress_percent,' +
+ 'upgrade_groups/upgrade_items/UpgradeItem/request_id,' +
+ 'upgrade_groups/upgrade_items/UpgradeItem/skippable,' +
+ 'upgrade_groups/upgrade_items/UpgradeItem/stage_id,' +
+ 'upgrade_groups/upgrade_items/UpgradeItem/status,' +
+ 'upgrade_groups/upgrade_items/UpgradeItem/text&' +
+ 'minimal_response=true',
'mock': '/data/stack_versions/upgrade.json'
},
'admin.upgrade.state': {
'real': '/clusters/{clusterName}/upgrades/{id}?fields=Upgrade',
'mock': '/data/stack_versions/upgrade.json'
},
- 'admin.upgrade.task': {
- 'real': '/clusters/{clusterName}/upgrades/{upgradeId}/upgrade_groups?upgrade_items/tasks/Tasks/id={taskId}&fields=upgrade_items/tasks/Tasks/*',
- 'mock': '/data/stack_versions/upgrade_task.json'
+ 'admin.upgrade.upgrade_item': {
+ 'real': '/clusters/{clusterName}/upgrades/{upgradeId}/upgrade_groups/{groupId}/upgrade_items/{stageId}?fields=' +
+ 'UpgradeItem/group_id,' +
+ 'UpgradeItem/stage_id,' +
+ 'tasks/Tasks/*&' +
+ 'minimal_response=true',
+ 'mock': '/data/stack_versions/upgrade_item.json'
},
'admin.upgrade.start': {
'real': '/clusters/{clusterName}/upgrades',
http://git-wip-us.apache.org/repos/asf/ambari/blob/d153d4b6/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js
----------------------------------------------------------------------
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 d745e39..3813875 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
@@ -23,6 +23,11 @@ App.upgradeGroupView = Em.View.extend({
templateName: require('templates/main/admin/stack_upgrade/upgrade_group'),
/**
+ * @type {Array}
+ */
+ taskDetailsProperties: ['status', 'stdout', 'stderr', 'error_log', 'host_name', 'output_log'],
+
+ /**
* Only one UpgradeGroup or UpgradeItem could be expanded at a time
* @param {object} event
*/
@@ -34,6 +39,10 @@ App.upgradeGroupView = Em.View.extend({
}, this);
this.collapseLowerLevels(event.context);
event.context.set('isExpanded', !isExpanded);
+ if (!isExpanded && event.context.get('type') === 'ITEM') {
+ event.context.set('isTasksLoaded', false);
+ this.doPolling(event.context);
+ }
},
/**
@@ -51,5 +60,74 @@ App.upgradeGroupView = Em.View.extend({
}, this);
}
}
+ },
+
+ /**
+ * poll for tasks when item is expanded
+ */
+ doPolling: function (item) {
+ var self = this;
+
+ if (item && item.get('isExpanded')) {
+ this.getTasks(item).complete(function () {
+ self.set('timer', setTimeout(function () {
+ self.doPolling(item);
+ }, App.bgOperationsUpdateInterval));
+ });
+ } else {
+ clearTimeout(this.get('timer'));
+ }
+ },
+
+ /**
+ * request tasks from server
+ * @return {$.ajax}
+ */
+ getTasks: function (item) {
+ return App.ajax.send({
+ name: 'admin.upgrade.upgrade_item',
+ sender: this,
+ data: {
+ upgradeId: item.get('request_id'),
+ groupId: item.get('group_id'),
+ stageId: item.get('stage_id')
+ },
+ success: 'getTasksSuccessCallback'
+ });
+ },
+
+ /**
+ * success callback of <code>getTasks</code>
+ * @param {object} data
+ */
+ getTasksSuccessCallback: function (data) {
+ this.get('controller.upgradeData.upgradeGroups').forEach(function (group) {
+ if (group.get('group_id') === data.UpgradeItem.group_id) {
+ group.get('upgradeItems').forEach(function (item) {
+ if (item.get('stage_id') === data.UpgradeItem.stage_id) {
+ if (item.get('tasks.length')) {
+ item.set('isTasksLoaded', true);
+ 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]);
+ }, this);
+ }, this);
+ } else {
+ var tasks = [];
+ data.tasks.forEach(function (task) {
+ tasks.pushObject(App.upgradeEntity.create({type: 'TASK'}, task.Tasks));
+ });
+ item.set('tasks', tasks);
+ }
+ item.set('isTasksLoaded', true);
+ }
+ }, this);
+ }
+ }, this);
+ },
+
+ willDestroyElement: function () {
+ clearTimeout(this.get('timer'));
}
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/d153d4b6/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js
----------------------------------------------------------------------
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 412004c..798f416 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
@@ -57,17 +57,6 @@ App.upgradeTaskView = Em.View.extend({
tasks: [],
/**
- * poll timer
- * @type {number|null}
- */
- timer: null,
-
- /**
- * @type {Array}
- */
- taskDetailsProperties: ['status', 'stdout', 'stderr', 'error_log', 'host_name', 'output_log'],
-
- /**
* @type {string}
*/
logTabId: function () {
@@ -95,62 +84,6 @@ App.upgradeTaskView = Em.View.extend({
return '#' + this.get('errorTabId');
}.property(''),
- didInsertElement: function () {
- if (this.get('outsideView')) this.doPolling();
- },
-
- /**
- * poll for task details when task is expanded
- */
- doPolling: function () {
- var self = this;
-
- if (this.get('content.isExpanded') || this.get('outsideView')) {
- this.getTaskDetails().done(function() {
- self.set('timer', setTimeout(function () {
- self.doPolling();
- }, App.bgOperationsUpdateInterval));
- });
- } else {
- clearTimeout(this.get('timer'));
- }
- }.observes('content.isExpanded', 'outsideView'),
-
- /**
- * request task details from server
- * @return {$.Deferred}
- */
- getTaskDetails: function () {
- var deferred = $.Deferred();
-
- if (Em.isNone(this.get('content'))) {
- deferred.resolve();
- } else {
- App.ajax.send({
- name: 'admin.upgrade.task',
- sender: this,
- data: {
- upgradeId: this.get('content.request_id'),
- taskId: this.get('content.id')
- },
- success: 'getTaskDetailsSuccessCallback'
- }).then(deferred.resolve);
- }
- return deferred.promise();
- },
-
- /**
- * success callback of <code>getTaskDetails</code>
- * @param {object} data
- */
- getTaskDetailsSuccessCallback: function (data) {
- //TODO change request to get only one task when API ready
- var task = data.items[0].upgrade_items[0].tasks[0].Tasks;
- this.get('taskDetailsProperties').forEach(function (property) {
- this.set('content.' + property, task[property]);
- }, this);
- },
-
/**
* open error log in textarea to give ability to cope content
* @param {object} event
http://git-wip-us.apache.org/repos/asf/ambari/blob/d153d4b6/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js b/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
index a9f9a8c..e6832f8 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
@@ -189,7 +189,7 @@ App.MainAdminStackVersionsView = Em.View.extend({
doPolling: function () {
var self = this;
this.set('updateTimer', window.setTimeout(function () {
- self.poll();
+ self.poll.apply(self);
}, App.bgOperationsUpdateInterval));
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/d153d4b6/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
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 daa6a22..33ce539 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
@@ -365,12 +365,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
group_id: 1,
upgradeItems: [
Em.Object.create({
- stage_id: 1,
- tasks: [
- Em.Object.create({
- id: 1
- })
- ]
+ stage_id: 1
})
]
})
@@ -393,15 +388,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
stage_id: 1,
status: 'COMPLETED',
progress_percent: 100
- },
- tasks: [
- {
- Tasks: {
- id: 1,
- status: 'COMPLETED'
- }
- }
- ]
+ }
}
]
}
@@ -413,7 +400,6 @@ describe('App.MainAdminStackAndUpgradeController', function() {
expect(controller.get('upgradeData.upgradeGroups')[0].get('progress_percent')).to.equal(100);
expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('status')).to.equal('COMPLETED');
expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('progress_percent')).to.equal(100);
- expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('tasks')[0].get('status')).to.equal('COMPLETED');
});
});
@@ -432,26 +418,12 @@ describe('App.MainAdminStackAndUpgradeController', function() {
{
UpgradeItem: {
stage_id: 1
- },
- tasks: [
- {
- Tasks: {
- id: 1
- }
- }
- ]
+ }
},
{
UpgradeItem: {
stage_id: 2
- },
- tasks: [
- {
- Tasks: {
- id: 2
- }
- }
- ]
+ }
}
]
},
@@ -459,9 +431,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
UpgradeGroup: {
group_id: 2
},
- upgrade_items: [
-
- ]
+ upgrade_items: []
}
]
};
@@ -471,7 +441,6 @@ describe('App.MainAdminStackAndUpgradeController', function() {
expect(controller.get('upgradeData.upgradeGroups')[1].get('group_id')).to.equal(1);
expect(controller.get('upgradeData.upgradeGroups')[1].get('upgradeItems')[0].get('stage_id')).to.equal(2);
expect(controller.get('upgradeData.upgradeGroups')[1].get('upgradeItems')[1].get('stage_id')).to.equal(1);
- expect(controller.get('upgradeData.upgradeGroups')[1].get('upgradeItems')[0].get('tasks')[0].get('id')).to.equal(2);
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/d153d4b6/ambari-web/test/views/main/admin/stack_upgrade/upgrade_task_view_test.js
----------------------------------------------------------------------
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 92fd3d6..00fee03 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
@@ -64,121 +64,6 @@ describe('App.upgradeTaskView', function () {
});
});
- describe("#doPolling()", function () {
- beforeEach(function () {
- sinon.stub(view, 'getTaskDetails', function() {
- return {
- done: function (callback) {
- callback();
- }
- }
- });
- sinon.spy(view, 'doPolling');
- this.clock = sinon.useFakeTimers();
- });
- afterEach(function () {
- view.getTaskDetails.restore();
- view.doPolling.restore();
- this.clock.restore();
- });
- it("isExpanded = false, outsideView = false", function () {
- view.set('content.isExpanded', false);
- view.set('outsideView', false);
- view.doPolling();
- expect(view.getTaskDetails.called).to.be.false;
- });
- it("isExpanded = true", function () {
- view.set('content.isExpanded', true);
- view.set('outsideView', false);
- view.doPolling();
- expect(view.getTaskDetails.calledOnce).to.be.true;
- this.clock.tick(App.bgOperationsUpdateInterval);
- expect(view.doPolling.calledTwice).to.be.true;
- });
- it("outsideView = true", function () {
- view.set('outsideView', true);
- view.set('content.isExpanded', false);
- view.doPolling();
- expect(view.getTaskDetails.calledOnce).to.be.true;
- this.clock.tick(App.bgOperationsUpdateInterval);
- expect(view.doPolling.calledTwice).to.be.true;
- });
- });
-
- describe("#didInsertElement()", function() {
- beforeEach(function () {
- sinon.stub(view, 'doPolling', Em.K);
- });
- afterEach(function () {
- view.doPolling.restore();
- });
- it("outsideView = true", function() {
- view.set('outsideView', true);
- view.didInsertElement();
- expect(view.doPolling.calledOnce).to.be.true;
- });
- it("outsideView = false", function() {
- view.set('outsideView', false);
- view.didInsertElement();
- expect(view.doPolling.called).to.be.false;
- });
- });
-
- describe("#getTaskDetails()", function () {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send').returns({
- then: Em.K
- });
- });
- afterEach(function () {
- App.ajax.send.restore();
- view.set('content', Em.Object.create());
- });
- it("call App.ajax.send()", function () {
- view.set('content.id', 1);
- view.set('content.request_id', 1);
- view.getTaskDetails();
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'admin.upgrade.task',
- sender: view,
- data: {
- upgradeId: 1,
- taskId: 1
- },
- success: 'getTaskDetailsSuccessCallback'
- });
- });
- it("call App.ajax.send()", function () {
- view.set('content', null);
- view.getTaskDetails();
- expect(App.ajax.send.called).to.be.false;
- });
- });
-
- describe("#getTaskDetailsSuccessCallback()", function () {
- it("", function () {
- var data = {
- items: [
- {
- upgrade_items: [
- {
- tasks: [
- {
- Tasks: {
- prop1: 'value'
- }
- }
- ]
- }
- ]
- }
- ]
- };
- view.getTaskDetailsSuccessCallback(data);
- expect(view.get('content.prop1')).to.equal('value');
- });
- });
-
describe("#copyErrLog()", function () {
before(function () {
sinon.stub(view, 'toggleProperty', Em.K);