Repository: ambari Updated Branches: refs/heads/trunk 23b7c1108 -> 5a43202b4
AMBARI-9087 Add "Downgrade" button to Manual Step / Failure box. (atkach) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5a43202b Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5a43202b Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5a43202b Branch: refs/heads/trunk Commit: 5a43202b4dbd02aab450ceb60efc325c5f77930b Parents: 23b7c11 Author: Andrii Tkach <[email protected]> Authored: Mon Jan 12 14:37:36 2015 +0200 Committer: Andrii Tkach <[email protected]> Committed: Mon Jan 12 15:43:53 2015 +0200 ---------------------------------------------------------------------- .../main/admin/stack_and_upgrade_controller.js | 44 +++++++++++---- ambari-web/app/messages.js | 3 ++ .../templates/main/admin/stack_and_upgrade.hbs | 8 +-- .../stack_upgrade/stack_upgrade_wizard.hbs | 6 +++ ambari-web/app/utils/ajax/ajax.js | 19 ++++++- .../views/main/admin/stack_and_upgrade_view.js | 21 -------- .../admin/stack_upgrade/upgrade_task_view.js | 4 +- .../admin/stack_upgrade/upgrade_wizard_view.js | 13 +++++ .../admin/stack_and_upgrade_controller_test.js | 56 ++++++++++++++++++-- .../stack_upgrade/upgrade_wizard_view_test.js | 21 ++++++++ 10 files changed, 152 insertions(+), 43 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/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 bbd69fa..341084b 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 @@ -60,7 +60,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, /** * properties that stored to localStorage to resume wizard progress */ - wizardStorageProperties: ['upgradeId', 'upgradeVersion'], + wizardStorageProperties: ['upgradeId', 'upgradeVersion', 'currentVersion'], init: function () { this.initDBProperties(); @@ -250,10 +250,36 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, }, /** + * downgrade confirmation popup + */ + confirmDowngrade: function () { + var self = this; + var currentVersion = this.get('currentVersion'); + return App.showConfirmationPopup( + function() { + self.downgrade.call(self, currentVersion); + }, + Em.I18n.t('admin.stackUpgrade.downgrade.body').format(currentVersion.repository_name), + null, + Em.I18n.t('admin.stackUpgrade.downgrade.title').format(currentVersion.repository_name), + Em.I18n.t('admin.stackUpgrade.downgrade.proceed') + ); + }, + + /** * make call to start downgrade process + * @params {object} currentVersion */ - downgrade: function () { - //TODO start downgrade + downgrade: function (currentVersion) { + App.ajax.send({ + name: 'admin.downgrade.start', + sender: this, + data: { + value: currentVersion.repository_version, + label: currentVersion.repository_name + }, + success: 'upgradeSuccessCallback' + }); }, /** @@ -264,21 +290,20 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, App.ajax.send({ name: 'admin.upgrade.start', sender: this, - data: { - version: version.value - }, + data: version, success: 'upgradeSuccessCallback' }); - this.set('upgradeVersion', version.label); - this.setDBProperty('upgradeVersion', version.label); + this.setDBProperty('currentVersion', this.get('currentVersion')); }, /** * success callback of <code>upgrade()</code> * @param {object} data */ - upgradeSuccessCallback: function (data) { + upgradeSuccessCallback: function (data, opt, params) { this.set('upgradeId', data.resources[0].Upgrade.request_id); + this.set('upgradeVersion', params.label); + this.setDBProperty('upgradeVersion', params.label); this.setDBProperty('upgradeId', data.resources[0].Upgrade.request_id); this.setDBProperty('upgradeState', 'PENDING'); App.set('upgradeState', 'PENDING'); @@ -351,6 +376,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, App.set('upgradeState', 'INIT'); this.set('upgradeVersion', null); this.setDBProperty('upgradeVersion', undefined); + this.setDBProperty('currentVersion', undefined); App.clusterStatus.setClusterStatus({ localdb: App.db.data }); http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index 1fbaded..f08c270 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -1328,6 +1328,9 @@ Em.I18n.translations = { 'admin.stackVersions.updateTab.title.available': "Updates Available ({0})", 'admin.stackVersions.updateTab.title.not.available': "No Updates Available", + 'admin.stackUpgrade.downgrade.proceed': "Proceed with Downgrade", + 'admin.stackUpgrade.downgrade.title': "Downgrade to {0}", + 'admin.stackUpgrade.downgrade.body': "Are you sure you wish to abort the upgrade process and downgrade to {0}", 'admin.stackUpgrade.title': "Stack and upgrade", 'admin.stackUpgrade.hostsOnline': "{0}/{1} hosts online", 'admin.stackUpgrade.state.available': "Upgrade Available", http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs b/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs index 674a58e..ef2f65e 100644 --- a/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs +++ b/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs @@ -26,12 +26,8 @@ {{#view view.sourceVersionView classNames="span2 offset3 box flex-width"}} <div class="version-name"><strong>{{view.versionName}}</strong></div> <div> - {{#if view.label}} - <button {{bindAttr class=":btn view.btnClass"}} {{action runAction target="view"}}>{{view.label}}</button> - {{else}} - {{view.hostsCount}} - {{pluralize view.hostsCount singular="t:admin.stackUpgrade.host" plural="t:admin.stackUpgrade.hosts"}} - {{/if}} + {{view.hostsCount}} + {{pluralize view.hostsCount singular="t:admin.stackUpgrade.host" plural="t:admin.stackUpgrade.hosts"}} </div> {{/view}} <div class="span1"> http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs index bca7dc8..b4a1532 100644 --- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs +++ b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs @@ -64,6 +64,9 @@ </div> {{#if view.isHoldingState}} <div class="button-row"> + {{#if view.isDowngradeAvailable}} + <button class="btn btn-danger" {{action confirmDowngrade target="controller"}}>{{t common.downgrade}}</button> + {{/if}} {{#if view.isSkipable}} <button class="btn btn-warning" {{action continue view.failedItem target="view"}}>{{t admin.stackUpgrade.dialog.continue}}</button> {{else}} @@ -84,6 +87,9 @@ {{t admin.stackUpgrade.dialog.manualDone}} </div> <div class="button-row"> + {{#if view.isDowngradeAvailable}} + <button class="btn btn-danger" {{action confirmDowngrade target="controller"}}>{{t common.downgrade}}</button> + {{/if}} <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}> {{t common.proceed}} </button> http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/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 a7ee18d..acf2354 100644 --- a/ambari-web/app/utils/ajax/ajax.js +++ b/ambari-web/app/utils/ajax/ajax.js @@ -1335,14 +1335,29 @@ var urls = { 'mock': '/data/stack_versions/upgrade_task.json' }, 'admin.upgrade.start': { - 'real': '/clusters/{clusterName}/upgrades/{id}', + 'real': '/clusters/{clusterName}/upgrades', 'mock': '/data/stack_versions/start_upgrade.json', 'type': 'POST', 'format': function (data) { return { data: JSON.stringify({ "Upgrade": { - "repository_version": data.version + "repository_version": data.value + } + }) + } + } + }, + 'admin.downgrade.start': { + 'real': '/clusters/{clusterName}/upgrades', + 'mock': '/data/stack_versions/start_upgrade.json', + 'type': 'POST', + 'format': function (data) { + return { + data: JSON.stringify({ + "Upgrade": { + "repository_version": data.value, + "force_downgrade": true } }) } http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/views/main/admin/stack_and_upgrade_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/admin/stack_and_upgrade_view.js b/ambari-web/app/views/main/admin/stack_and_upgrade_view.js index 0cb17ea..3c90e74 100644 --- a/ambari-web/app/views/main/admin/stack_and_upgrade_view.js +++ b/ambari-web/app/views/main/admin/stack_and_upgrade_view.js @@ -104,27 +104,6 @@ App.MainAdminStackAndUpgradeView = Em.View.extend({ version: function () { return this.get('controller.currentVersion'); }.property('controller.currentVersion'), - btnClass: 'btn-danger', - didInsertElement: function () { - this.buttonObserver(); - }, - - /** - * method of controller called on click of source version button - * @type {string} - * @default null - */ - method: null, - - /** - * label of source version button - * @type {string} - */ - label: "", - buttonObserver: function () { - this.set('method', App.get('upgradeState') !== 'INIT' && 'downgrade'); - this.set('label', App.get('upgradeState') !== 'INIT' && Em.I18n.t('common.downgrade')); - }.observes('App.upgradeState'), hostsCount: function () { return this.get('version.host_states.CURRENT.length'); }.property('version.host_states.CURRENT.length') http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/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 c4fc0ed..7b85afd 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 @@ -89,9 +89,11 @@ App.upgradeTaskView = Em.View.extend({ /** * request task details from server + * @return {$.ajax|null} */ getTaskDetails: function () { - App.ajax.send({ + if (Em.isNone(this.get('content'))) return null; + return App.ajax.send({ name: 'admin.upgrade.task', sender: this, data: { http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js index d4e819c..cd1d344 100644 --- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js +++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js @@ -18,6 +18,7 @@ var App = require('app'); +var stringUtils = require('utils/string_utils'); App.upgradeWizardView = Em.View.extend({ controllerBinding: 'App.router.mainAdminStackAndUpgradeController', @@ -56,6 +57,15 @@ App.upgradeWizardView = Em.View.extend({ outsideView: true, /** + * Downgrade should be available only if target version higher than current, so we can't downgrade + * when downgrade already started + * @type {boolean} + */ + isDowngradeAvailable: function () { + return stringUtils.compareVersions(this.get('controller.upgradeVersion'), this.get('controller.currentVersion.repository_version')) === 1; + }.property('controller.currentVersion', 'controller.upgradeVersion'), + + /** * progress value is rounded to floor * @type {number} */ @@ -70,6 +80,9 @@ App.upgradeWizardView = Em.View.extend({ upgradeGroups: function () { if (Em.isNone(this.get('controller.upgradeData.upgradeGroups'))) return []; var upgradeGroups = this.get('controller.upgradeData.upgradeGroups'); + upgradeGroups.forEach(function (group) { + group.get('upgradeItems').reverse(); + }); upgradeGroups.reverse(); return upgradeGroups; }.property('controller.upgradeData.upgradeGroups'), http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/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 6388692..3fea58c 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 @@ -360,6 +360,9 @@ describe('App.MainAdminStackAndUpgradeController', function() { controller.setDBProperty.restore(); }); it("make ajax call", function() { + controller.set('currentVersion', { + repository_version: '2.2' + }); controller.upgrade({ value: '2.2', label: 'HDP-2.2' @@ -368,12 +371,14 @@ describe('App.MainAdminStackAndUpgradeController', function() { name: 'admin.upgrade.start', sender: controller, data: { - version: '2.2' + value: '2.2', + label: 'HDP-2.2' }, success: 'upgradeSuccessCallback' }); - expect(controller.get('upgradeVersion')).to.equal('HDP-2.2'); - expect(controller.setDBProperty.calledWith('upgradeVersion', 'HDP-2.2')).to.be.true; + expect(controller.setDBProperty.calledWith('currentVersion', { + repository_version: '2.2' + })).to.be.true; }); }); @@ -398,8 +403,10 @@ describe('App.MainAdminStackAndUpgradeController', function() { } ] }; - controller.upgradeSuccessCallback(data); + controller.upgradeSuccessCallback(data, {}, {label: 'HDP-2.2.1'}); expect(controller.setDBProperty.calledWith('upgradeId', 1)).to.be.true; + expect(controller.setDBProperty.calledWith('upgradeVersion', 'HDP-2.2.1')).to.be.true; + expect(controller.get('upgradeVersion')).to.equal('HDP-2.2.1'); expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true; expect(controller.openUpgradeDialog.calledOnce).to.be.true; }); @@ -531,4 +538,45 @@ describe('App.MainAdminStackAndUpgradeController', function() { expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true; }); }); + + describe("#confirmDowngrade()", function() { + before(function () { + sinon.stub(App, 'showConfirmationPopup', Em.K); + }); + after(function () { + App.showConfirmationPopup.restore(); + }); + it("show confirmation popup", function() { + controller.set('currentVersion', Em.Object.create({ + repository_version: '2.2', + repository_name: 'HDP-2.2' + })); + controller.confirmDowngrade(); + expect(App.showConfirmationPopup.calledOnce).to.be.true; + }); + }); + + describe("#downgrade()", function() { + before(function () { + sinon.stub(App.ajax, 'send', Em.K); + }); + after(function () { + App.ajax.send.restore(); + }); + it("make ajax call", function() { + controller.downgrade(Em.Object.create({ + repository_version: '2.2', + repository_name: 'HDP-2.2' + })); + expect(App.ajax.send.getCall(0).args[0]).to.eql({ + name: 'admin.downgrade.start', + sender: controller, + data: { + value: '2.2', + label: 'HDP-2.2' + }, + success: 'upgradeSuccessCallback' + }); + }); + }); }); http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js index cba70bd..2e63f92 100644 --- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js +++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js @@ -288,4 +288,25 @@ describe('App.upgradeWizardView', function () { }); }); }); + + describe("#isDowngradeAvailable", function() { + it("downgrade available", function() { + view.set('controller.upgradeVersion', '2.2.1'); + view.set('controller.currentVersion', {repository_version: '2.2'}); + view.propertyDidChange('isDowngradeAvailable'); + expect(view.get('isDowngradeAvailable')).to.be.true; + }); + it("downgrade unavailable", function() { + view.set('controller.upgradeVersion', '2.2'); + view.set('controller.currentVersion', {repository_version: '2.2'}); + view.propertyDidChange('isDowngradeAvailable'); + expect(view.get('isDowngradeAvailable')).to.be.false; + }); + it("downgrade unavailable", function() { + view.set('controller.upgradeVersion', '2.2'); + view.set('controller.currentVersion', {repository_version: '2.2.1'}); + view.propertyDidChange('isDowngradeAvailable'); + expect(view.get('isDowngradeAvailable')).to.be.false; + }); + }); });
