You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2015/12/03 12:15:55 UTC
ambari git commit: AMBARI-14175. Upgrade Options popup: no handling
for the case of incomplete pre-upgrade check
Repository: ambari
Updated Branches:
refs/heads/trunk 5d1f56df8 -> c17d6ddf7
AMBARI-14175. Upgrade Options popup: no handling for the case of incomplete pre-upgrade check
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c17d6ddf
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c17d6ddf
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c17d6ddf
Branch: refs/heads/trunk
Commit: c17d6ddf732497ad1f46d9aa1473befc31ceacd2
Parents: 5d1f56d
Author: Alex Antonenko <hi...@gmail.com>
Authored: Thu Dec 3 12:55:17 2015 +0200
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Thu Dec 3 13:15:49 2015 +0200
----------------------------------------------------------------------
.../app/controllers/global/update_controller.js | 2 +-
.../main/admin/stack_and_upgrade_controller.js | 178 ++++++++-----
ambari-web/app/messages.js | 3 +
ambari-web/app/styles/application.less | 14 +-
ambari-web/app/styles/common.less | 5 +
ambari-web/app/styles/stack_versions.less | 26 +-
.../admin/stack_upgrade/upgrade_options.hbs | 10 +-
.../main/admin/stack_upgrade/versions_view.js | 5 +
.../global/update_controller_test.js | 12 +-
.../admin/stack_and_upgrade_controller_test.js | 266 ++++++++++++++++++-
.../admin/stack_upgrade/version_view_test.js | 10 +-
11 files changed, 435 insertions(+), 96 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/ambari-web/app/controllers/global/update_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/update_controller.js b/ambari-web/app/controllers/global/update_controller.js
index 21e4e94..0a5d913 100644
--- a/ambari-web/app/controllers/global/update_controller.js
+++ b/ambari-web/app/controllers/global/update_controller.js
@@ -582,7 +582,7 @@ App.UpdateController = Em.Controller.extend({
updateUpgradeState: function (callback) {
var currentStateName = App.get('router.currentState.name'),
- parentStateName = App.get('router.parentState.name'),
+ parentStateName = App.get('router.currentState.parentState.name'),
mainAdminStackAndUpgradeController = App.get('router.mainAdminStackAndUpgradeController');
if (!(currentStateName === 'versions' && parentStateName === 'stackAndUpgrade') && currentStateName !== 'stackUpgrade' && App.get('wizardIsNotFinished') && !mainAdminStackAndUpgradeController.get('isLoadUpgradeDataPending')) {
mainAdminStackAndUpgradeController.loadUpgradeData(true).done(callback);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/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 d553fdb..c4b42c4 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
@@ -111,7 +111,12 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
icon: "icon-dashboard",
description: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.description'),
selected: false,
- allowed: true
+ allowed: true,
+ isCheckComplete: false,
+ isCheckRequestInProgress: false,
+ precheckResultsMessage: '',
+ precheckResultsTitle: '',
+ action: ''
}),
Em.Object.create({
displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.title'),
@@ -119,10 +124,17 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
icon: "icon-bolt",
description: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.description'),
selected: false,
- allowed: true
+ allowed: true,
+ isCheckComplete: false,
+ isCheckRequestInProgress: false,
+ precheckResultsMessage: '',
+ precheckResultsTitle: '',
+ action: ''
})
],
+ runningCheckRequests: [],
+
/**
* @type {boolean} true if some request that should disable actions is in progress
*/
@@ -651,6 +663,29 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
}, this);
},
+ getConfigsWarnings: function (configsMergeWarning) {
+ var configs = [];
+ if (configsMergeWarning && Em.get(configsMergeWarning, 'UpgradeChecks.status') === 'WARNING') {
+ var configsMergeCheckData = Em.get(configsMergeWarning, 'UpgradeChecks.failed_detail');
+ if (configsMergeCheckData && Em.isArray(configsMergeCheckData)) {
+ configs = configsMergeCheckData.map(function (item) {
+ var isDeprecated = Em.isNone(item.new_stack_value),
+ willBeRemoved = Em.isNone(item.result_value);
+ return {
+ type: item.type,
+ name: item.property,
+ currentValue: item.current,
+ recommendedValue: isDeprecated ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated') : item.new_stack_value,
+ isDeprecated: isDeprecated,
+ resultingValue: willBeRemoved ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved') : item.result_value,
+ willBeRemoved: willBeRemoved
+ };
+ });
+ }
+ }
+ return configs;
+ },
+
/**
* Open upgrade options window: upgrade type and failures tolerance
* @param {boolean} isInUpgradeWizard
@@ -658,15 +693,25 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
* @return App.ModalPopup
*/
upgradeOptions: function (isInUpgradeWizard, version) {
- var self = this;
+ var self = this,
+ upgradeMethods = this.get('upgradeMethods'),
+ runningCheckRequests = this.get('runningCheckRequests');
if (!isInUpgradeWizard) {
- this.getSupportedUpgradeTypes(Ember.Object.create({
+ upgradeMethods.setEach('isCheckRequestInProgress', true);
+ upgradeMethods.setEach('selected', false);
+ var request = this.getSupportedUpgradeTypes(Ember.Object.create({
stackName: App.get('currentStackVersion').split('-')[0],
stackVersion: App.get('currentStackVersion').split('-')[1],
toVersion: version.get('repositoryVersion')
- })).done(function(){
- self.runUpgradeMethodChecks(version);
- });
+ })).done(function () {
+ if (App.get('router.currentState.name') === 'versions' && App.get('router.currentState.parentState.name') === 'stackAndUpgrade') {
+ self.runUpgradeMethodChecks(version);
+ }
+ }).always(function () {
+ self.set('runningCheckRequests', runningCheckRequests.rejectProperty('type', 'ALL'));
+ });
+ request.type = 'ALL';
+ this.get('runningCheckRequests').push(request);
}
return App.ModalPopup.show({
@@ -709,6 +754,20 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
selectedMethod.set('selected', true);
this.set('parentView.selectedMethod', selectedMethod);
},
+ runAction: function (event) {
+ var method = event.context,
+ action = method.get('action');
+ if (action) {
+ this.get(action)(event);
+ }
+ },
+ rerunCheck: function (event) {
+ self.runPreUpgradeCheckOnly({
+ value: version.get('repositoryVersion'),
+ label: version.get('displayName'),
+ type: event.context.get('type')
+ });
+ },
openMessage: function (event) {
if (isInUpgradeWizard || !event.context.get('allowed')) return;
var data = event.context.get('precheckResultsData');
@@ -721,25 +780,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
popupData = {
items: data.items.rejectProperty('UpgradeChecks.id', 'CONFIG_MERGE')
},
- configs = [];
- if (configsMergeWarning && Em.get(configsMergeWarning, 'UpgradeChecks.status') === 'WARNING') {
- var configsMergeCheckData = Em.get(configsMergeWarning, 'UpgradeChecks.failed_detail');
- if (configsMergeCheckData) {
- configs = configsMergeCheckData.map(function (item) {
- var isDeprecated = Em.isNone(item.new_stack_value),
- willBeRemoved = Em.isNone(item.result_value);
- return {
- type: item.type,
- name: item.property,
- currentValue: item.current,
- recommendedValue: isDeprecated ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated') : item.new_stack_value,
- isDeprecated: isDeprecated,
- resultingValue: willBeRemoved ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved') : item.result_value,
- willBeRemoved: willBeRemoved
- };
- });
- }
- }
+ configs = self.getConfigsWarnings(configsMergeWarning);
App.showClusterCheckPopup(popupData, {
header: header,
failTitle: failTitle,
@@ -768,9 +809,9 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
skipSCFailures: self.get('failuresTolerance.skipSCFailures'),
disablePrimary: function () {
if (isInUpgradeWizard) return false;
- var selectedMethod = self.get('upgradeMethods').findProperty('selected');
- return selectedMethod ? selectedMethod.get('isPrecheckFailed') : true;
- }.property('selectedMethod'),
+ var selectedMethod = this.get('selectedMethod');
+ return (selectedMethod ? (selectedMethod.get('isPrecheckFailed') || selectedMethod.get('isCheckRequestInProgress')) : true);
+ }.property('selectedMethod', 'selectedMethod.isPrecheckFailed', 'selectedMethod.isCheckRequestInProgress'),
onPrimary: function () {
this.hide();
if (isInUpgradeWizard) {
@@ -827,15 +868,28 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
/**
* send request for pre upgrade check only
*/
- runPreUpgradeCheckOnly: function(data) {
+ runPreUpgradeCheckOnly: function (data) {
if (App.get('supports.preUpgradeCheck')) {
- App.ajax.send({
+ var method = this.get('upgradeMethods').findProperty('type', data.type);
+ method.setProperties({
+ isCheckComplete: false,
+ isCheckRequestInProgress: true,
+ action: ''
+ });
+ var request = App.ajax.send({
name: "admin.upgrade.pre_upgrade_check",
sender: this,
data: data,
- success: "runPreUpgradeCheckOnlySuccess",
- error: "runPreUpgradeCheckError"
+ success: 'runPreUpgradeCheckOnlySuccess',
+ error: 'runPreUpgradeCheckOnlyError',
+ callback: function () {
+ var runningCheckRequests = this.sender.get('runningCheckRequests');
+ method.set('isCheckRequestInProgress', false);
+ this.sender.set('runningCheckRequests', runningCheckRequests.rejectProperty('type', this.data.type));
+ }
});
+ request.type = data.type;
+ this.get('runningCheckRequests').push(request);
}
},
@@ -847,8 +901,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
name: "admin.upgrade.get_supported_upgradeTypes",
sender: this,
data: data,
- success: "getSupportedUpgradeTypesSuccess",
- error: "getSupportedUpgradeTypesError"
+ success: "getSupportedUpgradeTypesSuccess"
});
},
@@ -891,11 +944,16 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
message = Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed');
}
var method = self.get('upgradeMethods').findProperty('type', params.type);
- method.set('precheckResultsMessage', message);
- method.set('precheckResultsMessageClass', messageClass);
- method.set('isPrecheckFailed', messageClass == 'RED');
- method.set('precheckResultsMessageIconClass', messageIconClass);
- method.set('precheckResultsData', data);
+ method.setProperties({
+ precheckResultsMessage: message,
+ precheckResultsMessageClass: messageClass,
+ precheckResultsTitle: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.title'),
+ isPrecheckFailed: messageClass == 'RED',
+ precheckResultsMessageIconClass: messageIconClass,
+ precheckResultsData: data,
+ isCheckComplete: true,
+ action: 'openMessage'
+ });
this.updateSelectedMethod(false);
Em.run.later(this, function () {
// add tooltip for the type with preCheck errors
@@ -908,6 +966,18 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
}, 1000);
},
+ runPreUpgradeCheckOnlyError: function (request, ajaxOptions, error, data, params) {
+ var method = this.get('upgradeMethods').findProperty('type', params.type);
+ method.setProperties({
+ precheckResultsMessage: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.link'),
+ precheckResultsTitle: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.title'),
+ precheckResultsMessageClass: 'RED',
+ isPrecheckFailed: true,
+ precheckResultsMessageIconClass: 'icon-warning-sign',
+ action: 'rerunCheck'
+ });
+ },
+
/**
* In Upgrade Wizard: update which method already been selected on open
* Not in upgrade wizard: de-select the method with pre-check errors
@@ -975,28 +1045,12 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
failAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.fail.alert')),
warningTitle = Em.I18n.t('popup.clusterCheck.Upgrade.warning.title'),
warningAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.warning.alert')),
- configsMergeWarning = data.items.findProperty('UpgradeChecks.id', "CONFIG_MERGE"),
- configs = [];
- if (configsMergeWarning && Em.get(configsMergeWarning, 'UpgradeChecks.status') === 'WARNING') {
- data.items = data.items.rejectProperty('UpgradeChecks.id', 'CONFIG_MERGE');
- var configsMergeCheckData = Em.get(configsMergeWarning, 'UpgradeChecks.failed_detail');
- if (configsMergeCheckData) {
- configs = configsMergeCheckData.map(function (item) {
- var isDeprecated = Em.isNone(item.new_stack_value),
- willBeRemoved = Em.isNone(item.result_value);
- return {
- type: item.type,
- name: item.property,
- currentValue: item.current,
- recommendedValue: isDeprecated ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated') : item.new_stack_value,
- isDeprecated: isDeprecated,
- resultingValue: willBeRemoved ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved') : item.result_value,
- willBeRemoved: willBeRemoved
- };
- });
- }
- }
- App.showClusterCheckPopup(data, {
+ configsMergeWarning = data.items.findProperty('UpgradeChecks.id', 'CONFIG_MERGE'),
+ popupData = {
+ items: data.items.rejectProperty('UpgradeChecks.id', 'CONFIG_MERGE')
+ },
+ configs = this.getConfigsWarnings(configsMergeWarning);
+ App.showClusterCheckPopup(popupData, {
header: header,
failTitle: failTitle,
failAlert: failAlert,
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index f6d2486..2a78335 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1480,6 +1480,9 @@ Em.I18n.translations = {
'admin.stackVersions.version.upgrade.upgradeOptions.EU.description': "Services are stopped while the upgrade is performed. Incurs downtime, but faster upgrade.",
'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.rerun':'Rerun Checks',
'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.title':'Checks:',
+ 'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.checking': 'Checking...',
+ 'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.title': 'Check failed',
+ 'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.link': 'Rerun',
'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed':'Passed',
'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed.msg':'All checks passed',
'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.failed.tooltip':'Option not available',
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index 85cf90b..ae92649 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -1088,14 +1088,14 @@ h1 {
}
.spinner {
- width: 36px;
- height: 36px;
+ width: @spinner-default-width;
+ height: @spinner-default-height;
background: url("/img/spinner.gif");
margin: 0 auto;
&.service-button-spinner {
- width: 30px;
- height: 30px;
+ width: @spinner-small-width;
+ height: @spinner-small-height;
background-size: cover;
}
}
@@ -1369,9 +1369,9 @@ h1 {
}
.db-connection {
.spinner {
- width: 30px;
- height: 30px;
- background-size: 30px 30px;
+ width: @spinner-small-width;
+ height: @spinner-small-height;
+ background-size: cover;
}
.icon-ok-sign, .icon-warning-sign {
font-size: 27px;
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/ambari-web/app/styles/common.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/common.less b/ambari-web/app/styles/common.less
index a561bd4..b54cd06 100644
--- a/ambari-web/app/styles/common.less
+++ b/ambari-web/app/styles/common.less
@@ -42,6 +42,11 @@
@blue: #0572ff;
@gray-blue: #80A0B9;
+@spinner-default-width: 36px;
+@spinner-default-height: 36px;
+@spinner-small-width: 30px;
+@spinner-small-height: 30px;
+
(~".@{health-status-red-icon}") {
color: @health-status-red;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/ambari-web/app/styles/stack_versions.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/stack_versions.less b/ambari-web/app/styles/stack_versions.less
index 94d779f..8529606 100644
--- a/ambari-web/app/styles/stack_versions.less
+++ b/ambari-web/app/styles/stack_versions.less
@@ -119,7 +119,7 @@
.checkbox {
margin-left: 3px;
margin-right: 8px;
- margin-top: 0px;
+ margin-top: 0;
}
.icon-question-sign {
color: @blue;
@@ -139,7 +139,7 @@
border: 1px solid #d2d9dd;
height: 168px;
margin: 15px 15px 0 0;
- padding: 5px 0px;
+ padding: 5px 0;
a.not-active:hover {
text-decoration: none;
}
@@ -192,8 +192,8 @@
font-weight: 500;
font-size: 20px;
line-height: 20px;
- padding: 5px 5px 0px 5px;
- margin-bottom: 0px;
+ padding: 5px 5px 0 5px;
+ margin-bottom: 0;
span {
margin-left: 20px;
}
@@ -207,7 +207,7 @@
text-align: center;
color: #888;
font-size: 12px;
- margin: 0px 0px -18px 1px;
+ margin: 0 0px -18px 1px;
padding: 1px;
}
.hosts-section {
@@ -392,6 +392,18 @@
text-align: center;
padding-top: 10px;
font-size: 13px;
+ &.checking {
+ padding-top: 5px;
+ line-height: @spinner-small-height;
+ .spinner {
+ display: inline-block;
+ width: auto;
+ height: @spinner-small-height;
+ padding-left: @spinner-small-width + 4px;
+ background-repeat: no-repeat;
+ background-size: contain;
+ }
+ }
}
.method-precheck-message.GREEN {
.icon-ok {
@@ -414,7 +426,7 @@
.tolerance-text .tolerance-option {
margin: 5px 15px;
.ember-checkbox {
- margin-top: 0px;
+ margin-top: 0;
}
}
.text {
@@ -530,7 +542,7 @@
.checkbox {
margin-left: 3px;
margin-right: 8px;
- margin-top: 0px;
+ margin-top: 0;
}
.icon-question-sign {
color: @blue;
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_options.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_options.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_options.hbs
index 1be2539..4bb9db6 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_options.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_options.hbs
@@ -30,11 +30,15 @@
<div class="method-name">{{method.displayName}}</div>
<div class="method-description">{{{method.description}}}</div>
{{#unless view.isInUpgradeWizard}}
- {{#if method.precheckResultsMessage}}
+ {{#if method.isCheckRequestInProgress}}
+ <div class="method-precheck-message checking">
+ <div class="spinner">{{t admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.checking}}</div>
+ </div>
+ {{else}}
<div {{bindAttr class=":method-precheck-message method.precheckResultsMessageClass"}}>
<i {{bindAttr class="method.precheckResultsMessageIconClass"}}></i>
- <b>{{t admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.title}}</b>
- <a {{action openMessage method target="view"}}>
+ <b>{{method.precheckResultsTitle}}</b>
+ <a {{action runAction method target="view"}}>
{{method.precheckResultsMessage}}
</a>
</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/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 1a97354..d535300 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
@@ -199,7 +199,12 @@ App.MainAdminStackVersionsView = Em.View.extend({
* stop polling upgrade state
*/
willDestroyElement: function () {
+ var runningCheckRequests = this.get('controller.runningCheckRequests');
window.clearTimeout(this.get('updateTimer'));
+ runningCheckRequests.forEach(function (request) {
+ request.abort();
+ });
+ runningCheckRequests.clear();
},
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/ambari-web/test/controllers/global/update_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/update_controller_test.js b/ambari-web/test/controllers/global/update_controller_test.js
index e8d4353..8e68b21 100644
--- a/ambari-web/test/controllers/global/update_controller_test.js
+++ b/ambari-web/test/controllers/global/update_controller_test.js
@@ -308,7 +308,7 @@ describe('App.UpdateController', function () {
},
{
currentStateName: 'stackUpgrade',
- parentStateName: null,
+ parentStateName: 'admin',
wizardIsNotFinished: true,
isLoadUpgradeDataPending: true,
loadUpgradeDataCallCount: 0,
@@ -317,7 +317,7 @@ describe('App.UpdateController', function () {
},
{
currentStateName: 'versions',
- parentStateName: null,
+ parentStateName: 'admin',
wizardIsNotFinished: true,
isLoadUpgradeDataPending: false,
loadUpgradeDataCallCount: 1,
@@ -326,7 +326,7 @@ describe('App.UpdateController', function () {
},
{
currentStateName: 'versions',
- parentStateName: null,
+ parentStateName: 'admin',
wizardIsNotFinished: false,
isLoadUpgradeDataPending: false,
loadUpgradeDataCallCount: 0,
@@ -335,7 +335,7 @@ describe('App.UpdateController', function () {
},
{
currentStateName: 'versions',
- parentStateName: null,
+ parentStateName: 'admin',
wizardIsNotFinished: true,
isLoadUpgradeDataPending: true,
loadUpgradeDataCallCount: 0,
@@ -426,7 +426,9 @@ describe('App.UpdateController', function () {
appGetMock.withArgs('router.mainAdminStackAndUpgradeController').returns(Em.Object.create({
loadUpgradeData: mock.loadUpgradeData,
isLoadUpgradeDataPending: item.isLoadUpgradeDataPending
- })).withArgs('wizardIsNotFinished').returns(item.wizardIsNotFinished);
+ })).withArgs('wizardIsNotFinished').returns(item.wizardIsNotFinished)
+ .withArgs('router.currentState.name').returns(item.currentStateName)
+ .withArgs('router.currentState.parentState.name').returns(item.parentStateName);;
controller.updateUpgradeState(mock.callback);
expect(mock.loadUpgradeData.callCount).to.equal(item.loadUpgradeDataCallCount);
expect(mock.callback.callCount).to.equal(item.callbackCallCount);
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/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 b9c7cb7..1424863 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
@@ -801,38 +801,55 @@ describe('App.MainAdminStackAndUpgradeController', function() {
before(function () {
sinon.spy(App, 'ModalPopup');
sinon.spy(App, 'showConfirmationFeedBackPopup');
- this.mock = sinon.stub(controller, 'getSupportedUpgradeTypes');
+ sinon.stub(controller, 'getSupportedUpgradeTypes').returns({
+ done: function (callback) {
+ callback([1]);
+ return {
+ always: function (alwaysCallback) {
+ alwaysCallback();
+ return {};
+ }
+ };
+ }
+ });
sinon.stub(controller, 'runPreUpgradeCheck', Em.K);
+ sinon.stub(App.RepositoryVersion, 'find').returns([
+ Em.Object.create({
+ status: 'CURRENT'
+ })
+ ]);
+ });
+ beforeEach(function () {
+ controller.get('runningCheckRequests').clear();
});
after(function () {
App.ModalPopup.restore();
App.showConfirmationFeedBackPopup.restore();
controller.runPreUpgradeCheck.restore();
- this.mock.restore();
+ controller.getSupportedUpgradeTypes.restore();
controller.get('upgradeMethods').setEach('selected', false);
+ App.RepositoryVersion.find.restore();
});
it("show confirmation popup", function() {
var version = Em.Object.create({displayName: 'HDP-2.2'});
- this.mock.returns({
- done: function(callback) {callback([1]);}
- });
- controller.get('upgradeMethods')[0].set('selected', true);
controller.set('isDowngrade', false);
var popup = controller.upgradeOptions(false, version);
expect(App.ModalPopup.calledOnce).to.be.true;
+ expect(controller.get('upgradeMethods').everyProperty('isCheckRequestInProgress')).to.be.true;
+ expect(controller.get('upgradeMethods').someProperty('selected')).to.be.false;
+ controller.get('upgradeMethods')[0].set('selected', true);
var confirmPopup = popup.onPrimary();
expect(App.showConfirmationFeedBackPopup.calledOnce).to.be.true;
confirmPopup.onPrimary();
expect(controller.runPreUpgradeCheck.calledWith(version)).to.be.true;
+ expect( controller.get('runningCheckRequests')).to.have.length(1);
});
it("NOT show confirmation popup on Downgrade", function() {
var version = Em.Object.create({displayName: 'HDP-2.2'});
- this.mock.returns({
- done: function(callback) {callback([1]);}
- });
controller.set('isDowngrade', true);
- var popup = controller.upgradeOptions(false, version);
+ controller.upgradeOptions(false, version);
expect(App.ModalPopup.calledOnce).to.be.false;
+ expect( controller.get('runningCheckRequests')).to.have.length(1);
});
});
@@ -1644,6 +1661,235 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
});
+ describe('#getConfigsWarnings', function () {
+
+ var cases = [
+ {
+ configs: [],
+ title: 'no warning'
+ },
+ {
+ configsMergeWarning: {},
+ configs: [],
+ title: 'empty data'
+ },
+ {
+ configsMergeWarning: {
+ UpgradeChecks: {}
+ },
+ configs: [],
+ title: 'incomplete data'
+ },
+ {
+ configsMergeWarning: {
+ UpgradeChecks: {
+ failed_detail: {}
+ }
+ },
+ configs: [],
+ title: 'invalid data'
+ },
+ {
+ configsMergeWarning: {
+ UpgradeChecks: {
+ failed_detail: []
+ }
+ },
+ configs: [],
+ title: 'empty configs array'
+ },
+ {
+ configsMergeWarning: {
+ UpgradeChecks: {
+ status: 'FAIL',
+ failed_detail: [
+ {
+ type: 't0',
+ property: 'p0',
+ current: 'c0',
+ new_stack_value: 'n0',
+ result_value: 'r0'
+ },
+ {
+ type: 't1',
+ property: 'p1',
+ current: 'c1',
+ new_stack_value: 'n1'
+ },
+ {
+ type: 't2',
+ property: 'p2',
+ current: 'c2',
+ result_value: 'r2'
+ }
+ ]
+ }
+ },
+ configs: [],
+ title: 'not a warning'
+ },
+ {
+ configsMergeWarning: {
+ UpgradeChecks: {
+ status: 'WARNING',
+ failed_detail: [
+ {
+ type: 't0',
+ property: 'p0',
+ current: 'c0',
+ new_stack_value: 'n0',
+ result_value: 'r0'
+ },
+ {
+ type: 't1',
+ property: 'p1',
+ current: 'c1',
+ new_stack_value: 'n1'
+ },
+ {
+ type: 't2',
+ property: 'p2',
+ current: 'c2',
+ result_value: 'r2'
+ }
+ ]
+ }
+ },
+ configs: [
+ {
+ type: 't0',
+ name: 'p0',
+ currentValue: 'c0',
+ recommendedValue: 'n0',
+ isDeprecated: false,
+ resultingValue: 'r0',
+ willBeRemoved: false
+ },
+ {
+ type: 't1',
+ name: 'p1',
+ currentValue: 'c1',
+ recommendedValue: 'n1',
+ isDeprecated: false,
+ resultingValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved'),
+ willBeRemoved: true
+ },
+ {
+ type: 't2',
+ name: 'p2',
+ currentValue: 'c2',
+ recommendedValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated'),
+ isDeprecated: true,
+ resultingValue: 'r2',
+ willBeRemoved: false
+ }
+ ],
+ title: 'normal case'
+ }
+ ];
+
+ cases.forEach(function (item) {
+ it(item.title, function () {
+ expect(controller.getConfigsWarnings(item.configsMergeWarning)).to.eql(item.configs);
+ });
+ });
+
+ });
+
+ describe('#runPreUpgradeCheckOnly', function () {
+
+ var appGetMock,
+ upgradeMethods = controller.get('upgradeMethods'),
+ cases = [
+ {
+ supportsPreUpgradeCheck: false,
+ ru: {
+ isCheckComplete: true,
+ isCheckRequestInProgress: false,
+ action: 'a'
+ },
+ eu: {
+ isCheckComplete: true,
+ isCheckRequestInProgress: false,
+ action: 'a'
+ },
+ ajaxCallCount: 0,
+ runningCheckRequestsLength: 0,
+ title: 'pre-upgrade checks not supported'
+ },
+ {
+ supportsPreUpgradeCheck: true,
+ ru: {
+ isCheckComplete: false,
+ isCheckRequestInProgress: true,
+ action: ''
+ },
+ eu: {
+ isCheckComplete: true,
+ isCheckRequestInProgress: false,
+ action: 'a'
+ },
+ ajaxCallCount: 1,
+ type: 'ROLLING',
+ runningCheckRequestsLength: 1,
+ title: 'rolling upgrade'
+ },
+ {
+ supportsPreUpgradeCheck: true,
+ ru: {
+ isCheckComplete: true,
+ isCheckRequestInProgress: false,
+ action: 'a'
+ },
+ eu: {
+ isCheckComplete: false,
+ isCheckRequestInProgress: true,
+ action: ''
+ },
+ ajaxCallCount: 1,
+ type: 'NON_ROLLING',
+ runningCheckRequestsLength: 1,
+ title: 'express upgrade'
+ }
+ ];
+
+ beforeEach(function () {
+ appGetMock = sinon.stub(App, 'get');
+ controller.get('runningCheckRequests').clear();
+ upgradeMethods.forEach(function (method) {
+ method.setProperties({
+ isCheckComplete: true,
+ isCheckRequestInProgress: false,
+ action: 'a'
+ });
+ });
+ sinon.stub(App.ajax, 'send').returns({});
+ });
+
+ afterEach(function () {
+ appGetMock.restore();
+ App.ajax.send.restore();
+ });
+
+ cases.forEach(function (item) {
+ it(item.title, function () {
+ var runningCheckRequests = controller.get('runningCheckRequests');
+ appGetMock.returns(item.supportsPreUpgradeCheck);
+ controller.runPreUpgradeCheckOnly({
+ type: item.type
+ });
+ expect(upgradeMethods.findProperty('type', 'ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 'action')).to.eql(item.ru);
+ expect(upgradeMethods.findProperty('type', 'NON_ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 'action')).to.eql(item.eu);
+ expect(App.ajax.send.callCount).to.equal(item.ajaxCallCount);
+ expect(runningCheckRequests).to.have.length(item.runningCheckRequestsLength);
+ if (item.runningCheckRequestsLength) {
+ expect(runningCheckRequests[0].type).to.equal(item.type);
+ }
+ });
+ });
+
+ });
+
describe("#openConfigsInNewWindow()", function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/c17d6ddf/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
index 930af95..50fb21a 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
@@ -24,7 +24,8 @@ describe('App.mainAdminStackVersionsView', function () {
var view = App.MainAdminStackVersionsView.create({
controller: {
currentVersion: {
- repository_version: "2.2.1.0"
+ repository_version: "2.2.1.0",
+ runningCheckRequests: []
},
load: Em.K
}
@@ -354,8 +355,13 @@ describe('App.mainAdminStackVersionsView', function () {
});
describe("#willDestroyElement()", function() {
+ var abort = sinon.spy(),
+ request = {
+ abort: abort
+ };
before(function () {
sinon.stub(window, 'clearTimeout', Em.K);
+ view.set('controller.runningCheckRequests', [request, request]);
});
after(function () {
window.clearTimeout.restore();
@@ -363,6 +369,8 @@ describe('App.mainAdminStackVersionsView', function () {
it("", function() {
view.willDestroyElement();
expect(window.clearTimeout.calledOnce).to.be.true;
+ expect(abort.calledTwice).to.be.true;
+ expect(view.get('controller.runningCheckRequests')).to.have.length(0);
});
});