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/09/10 14:14:32 UTC
ambari git commit: AMBARI-13054 Pre-Req Endpoint Should Be Used For
Determining Upgrade Button Visibility. (atkach)
Repository: ambari
Updated Branches:
refs/heads/trunk eccadf9ce -> c985602cc
AMBARI-13054 Pre-Req Endpoint Should Be Used For Determining Upgrade Button Visibility. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c985602c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c985602c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c985602c
Branch: refs/heads/trunk
Commit: c985602ccb4a8b9696f0f0eab33425aa7d03d706
Parents: eccadf9
Author: Andrii Tkach <at...@hortonworks.com>
Authored: Thu Sep 10 15:14:05 2015 +0300
Committer: Andrii Tkach <at...@hortonworks.com>
Committed: Thu Sep 10 15:14:24 2015 +0300
----------------------------------------------------------------------
.../stack_upgrade/upgrade_version_box_view.js | 87 ++++++++++++++++---
.../upgrade_version_box_view_test.js | 89 ++++++++++++++++++++
2 files changed, 165 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/c985602c/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
index f4950c3..2e468a1 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
@@ -32,6 +32,17 @@ App.UpgradeVersionBoxView = Em.View.extend({
PROGRESS_STATUS: 'IN_PROGRESS',
/**
+ * flag that verify Upgrade availability when version in INSTALL_FAILED state
+ * @type {boolean}
+ */
+ isUpgradeAvailable: false,
+
+ /**
+ * @type {boolean}
+ */
+ upgradeCheckInProgress: false,
+
+ /**
* progress of version installation
* @type {number}
*/
@@ -103,7 +114,6 @@ App.UpgradeVersionBoxView = Em.View.extend({
*/
stateElement: function () {
var currentVersion = this.get('controller.currentVersion');
- var upgradeVersion = this.get('controller.upgradeVersion');
var status = this.get('content.status');
var element = Em.Object.create({
status: status,
@@ -120,17 +130,21 @@ App.UpgradeVersionBoxView = Em.View.extend({
element.set('isLabel', true);
element.set('text', Em.I18n.t('common.current'));
element.set('class', 'label label-success');
- } else if (['INIT', 'INSTALL_FAILED', 'OUT_OF_SYNC'].contains(status)) {
+ }
+ else if (['INIT', 'INSTALL_FAILED', 'OUT_OF_SYNC'].contains(status) && !this.get('isUpgradeAvailable')) {
element.set('isButton', true);
element.set('text', Em.I18n.t('admin.stackVersions.version.installNow'));
element.set('action', 'installRepoVersionConfirmation');
element.set('isDisabled', !App.isAccessible('ADMIN') || this.get('controller.requestInProgress') || isInstalling);
- } else if (status === 'INSTALLING') {
+ }
+ else if (status === 'INSTALLING') {
element.set('iconClass', 'icon-cog');
element.set('isLink', true);
element.set('text', Em.I18n.t('hosts.host.stackVersions.status.installing'));
element.set('action', 'showProgressPopup');
- } else if (status === 'INSTALLED' && !this.get('isUpgrading')) {
+ }
+ else if ((status === 'INSTALLED' && !this.get('isUpgrading')) ||
+ (status === 'INSTALL_FAILED' && this.get('isUpgradeAvailable'))) {
if (stringUtils.compareVersions(this.get('content.repositoryVersion'), Em.get(currentVersion, 'repository_version')) === 1) {
var isDisabled = !App.isAccessible('ADMIN') || this.get('controller.requestInProgress') || isInstalling;
element.set('isButtonGroup', true);
@@ -142,40 +156,53 @@ App.UpgradeVersionBoxView = Em.View.extend({
isDisabled: isDisabled
});
element.set('isDisabled', isDisabled);
- } else {
+ }
+ else {
element.set('iconClass', 'icon-ok');
element.set('isLink', true);
element.set('text', Em.I18n.t('common.installed'));
element.set('action', null);
}
- } else if ((['UPGRADING', 'UPGRADE_FAILED', 'UPGRADED'].contains(status) || this.get('isUpgrading')) && !isAborted) {
+ }
+ else if ((['UPGRADING', 'UPGRADE_FAILED', 'UPGRADED'].contains(status) || this.get('isUpgrading')) && !isAborted) {
element.set('isLink', true);
element.set('action', 'openUpgradeDialog');
if (['HOLDING', 'HOLDING_FAILED', 'HOLDING_TIMEDOUT'].contains(App.get('upgradeState'))) {
element.set('iconClass', 'icon-pause');
if (this.get('controller.isDowngrade')) {
element.set('text', Em.I18n.t('admin.stackVersions.version.downgrade.pause'));
- } else {
+ }
+ else {
element.set('text', Em.I18n.t('admin.stackVersions.version.upgrade.pause'));
}
- } else {
+ }
+ else {
element.set('iconClass', 'icon-cog');
if (this.get('controller.isDowngrade')) {
element.set('text', Em.I18n.t('admin.stackVersions.version.downgrade.running'));
- } else {
+ }
+ else {
element.set('text', Em.I18n.t('admin.stackVersions.version.upgrade.running'));
}
}
- } else if (isAborted) {
+ }
+ else if (isAborted) {
element.set('isButton', true);
element.set('text', this.get('controller.isDowngrade') ? Em.I18n.t('common.reDowngrade') : Em.I18n.t('common.reUpgrade'));
element.set('action', this.get('controller.isDowngrade') ? 'confirmRetryDowngrade' : 'confirmRetryUpgrade');
element.set('isDisabled', this.get('controller.requestInProgress'));
}
return element;
- }.property('content.status', 'controller.isDowngrade', 'isUpgrading', 'controller.requestInProgress', 'parentView.repoVersions.@each.status'),
+ }.property(
+ 'content.status',
+ 'controller.isDowngrade',
+ 'isUpgrading',
+ 'controller.requestInProgress',
+ 'parentView.repoVersions.@each.status',
+ 'isUpgradeAvailable'),
didInsertElement: function () {
+ this.checkUpgradeAvailability();
App.tooltip($('.link-tooltip'), {title: Em.I18n.t('admin.stackVersions.version.linkTooltip')});
App.tooltip($('.hosts-tooltip'));
App.tooltip($('.out-of-sync-badge'), {title: Em.I18n.t('hosts.host.stackVersions.status.out_of_sync')});
@@ -339,5 +366,43 @@ App.UpgradeVersionBoxView = Em.View.extend({
App.router.get('mainHostController').filterByStack(displayName, state);
App.router.get('mainHostController').set('showFilterConditionsFirstLoad', true);
App.router.transitionTo('hosts.index');
+ },
+
+ /**
+ * when version in INSTALL_FAILED state it still could be upgraded if check passed
+ */
+ checkUpgradeAvailability: function () {
+ if (this.get('content.status') === 'INSTALL_FAILED') {
+ this.runUpgradeCheck();
+ }
+ }.observes('content.status'),
+
+ /**
+ * run Upgrade Check
+ */
+ runUpgradeCheck: function() {
+ if (App.get('supports.preUpgradeCheck') && !this.get('upgradeCheckInProgress')) {
+ App.ajax.send({
+ name: "admin.rolling_upgrade.pre_upgrade_check",
+ sender: this,
+ data: {
+ value: this.get('content.repositoryVersion'),
+ label: this.get('content.displayName')
+ },
+ success: "runUpgradeCheckSuccess",
+ error: "runUpgradeCheckError"
+ });
+ this.set('upgradeCheckInProgress', true);
+ }
+ },
+
+ runUpgradeCheckSuccess: function (data) {
+ this.set('isUpgradeAvailable', !data.items.someProperty('UpgradeChecks.status', 'FAIL'));
+ this.set('upgradeCheckInProgress', false);
+ },
+
+ runUpgradeCheckError: function() {
+ this.set('isUpgradeAvailable', false);
+ this.set('upgradeCheckInProgress', false);
}
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/c985602c/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
index 7654411..0911a4d 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
@@ -432,6 +432,34 @@ describe('App.UpgradeVersionBoxView', function () {
},
{
inputData: {
+ 'controller.currentVersion': {
+ repository_version: '2.2.0'
+ },
+ 'content.repositoryVersion': '2.2.1',
+ 'content.status': 'INSTALL_FAILED',
+ 'controller.requestInProgress': false,
+ 'parentView.repoVersions': [],
+ 'isUpgradeAvailable': true
+ },
+ setup: function () {
+ this.isAccessibleMock.withArgs('ADMIN').returns(true);
+ },
+ expected: {
+ status: 'INSTALL_FAILED',
+ isButtonGroup: true,
+ buttons: [
+ {
+ text: Em.I18n.t('admin.stackVersions.version.reinstall'),
+ action: 'installRepoVersionConfirmation',
+ isDisabled: false
+ }
+ ],
+ isDisabled: false
+ },
+ title: 'install failed version should be enabled to Upgrade'
+ },
+ {
+ inputData: {
'content.status': 'OUT_OF_SYNC',
'controller.requestInProgress': false,
'parentView.repoVersions': [
@@ -827,7 +855,68 @@ describe('App.UpgradeVersionBoxView', function () {
expect(view.get('isRepoUrlsEditDisabled')).to.equal(item.isRepoUrlsEditDisabled);
});
});
+ });
+
+ describe("#checkUpgradeAvailability()", function () {
+ beforeEach(function () {
+ sinon.stub(view, 'runUpgradeCheck', Em.K);
+ });
+ afterEach(function () {
+ view.runUpgradeCheck.restore();
+ });
+ it("status is INSTALLED", function () {
+ view.set('content.status', 'INSTALLED');
+ view.checkUpgradeAvailability();
+ expect(view.runUpgradeCheck.called).to.be.false;
+ });
+ it("status is INSTALL_FAILED", function () {
+ view.set('content.status', 'INSTALL_FAILED');
+ view.checkUpgradeAvailability();
+ expect(view.runUpgradeCheck.calledTwice).to.be.true;
+ });
});
+ describe("#runUpgradeCheck()", function () {
+ beforeEach(function () {
+ sinon.stub(App.ajax, 'send', Em.K);
+ });
+ afterEach(function () {
+ App.ajax.send.restore();
+ });
+
+ it("upgradeCheckInProgress is true", function () {
+ view.set('upgradeCheckInProgress', true);
+ view.runUpgradeCheck();
+ expect(App.ajax.send.called).to.be.false;
+ expect(view.get('upgradeCheckInProgress')).to.be.true;
+ });
+ it("upgradeCheckInProgress is false", function () {
+ view.set('upgradeCheckInProgress', false);
+ view.runUpgradeCheck();
+ expect(App.ajax.send.calledOnce).to.be.true;
+ expect(view.get('upgradeCheckInProgress')).to.be.true;
+ });
+ });
+
+ describe("#runUpgradeCheckSuccess()", function () {
+ it("check failed", function () {
+ view.runUpgradeCheckSuccess({items: [{UpgradeChecks: {status: 'FAIL'}}]});
+ expect(view.get('isUpgradeAvailable')).to.be.false;
+ expect(view.get('upgradeCheckInProgress')).to.be.false;
+ });
+ it("check passed", function () {
+ view.runUpgradeCheckSuccess({items: [{UpgradeChecks: {status: 'PASS'}}]});
+ expect(view.get('isUpgradeAvailable')).to.be.true;
+ expect(view.get('upgradeCheckInProgress')).to.be.false;
+ });
+ });
+
+ describe("#runUpgradeCheckError()", function () {
+ it("check failed", function () {
+ view.runUpgradeCheckError();
+ expect(view.get('isUpgradeAvailable')).to.be.false;
+ expect(view.get('upgradeCheckInProgress')).to.be.false;
+ });
+ });
});