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/01/12 14:44:00 UTC
ambari git commit: AMBARI-9087 Add "Downgrade" button to Manual Step
/ Failure box. (atkach)
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 <at...@hortonworks.com>
Authored: Mon Jan 12 14:37:36 2015 +0200
Committer: Andrii Tkach <at...@hortonworks.com>
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;
+ });
+ });
});