You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ab...@apache.org on 2015/04/10 14:56:37 UTC
ambari git commit: AMBARI-10434 Reverting config (by clicking
default) does not revert changed configs warnings. (ababiichuk)
Repository: ambari
Updated Branches:
refs/heads/trunk 53da928ba -> 26472889f
AMBARI-10434 Reverting config (by clicking default) does not revert changed configs warnings. (ababiichuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/26472889
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/26472889
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/26472889
Branch: refs/heads/trunk
Commit: 26472889fd57aa6182af7e1727eb97c563f90495
Parents: 53da928
Author: aBabiichuk <ab...@cybervisiontech.com>
Authored: Fri Apr 10 15:53:01 2015 +0300
Committer: aBabiichuk <ab...@cybervisiontech.com>
Committed: Fri Apr 10 15:56:23 2015 +0300
----------------------------------------------------------------------
.../mixins/common/configs/enhanced_configs.js | 19 ++++---
.../unit_convert/base_unit_convert_mixin.js | 1 +
.../configs/widgets/config_widget_view.js | 5 +-
.../widgets/slider_config_widget_view.js | 18 ++++---
ambari-web/app/views/common/controls_view.js | 34 ++++++++++++-
.../configs/widgets/config_widget_view_test.js | 52 ++++++++++++++++++++
.../widgets/list_config_widget_view_test.js | 2 +
7 files changed, 114 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/26472889/ambari-web/app/mixins/common/configs/enhanced_configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/enhanced_configs.js b/ambari-web/app/mixins/common/configs/enhanced_configs.js
index 1781d5d..1a53b7f 100644
--- a/ambari-web/app/mixins/common/configs/enhanced_configs.js
+++ b/ambari-web/app/mixins/common/configs/enhanced_configs.js
@@ -54,6 +54,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
* saveRecommendedDefault: {boolean}, used for cancel operation to restore previous state
* fileName: {string}, //file name without '.xml'
* propertyName: {string},
+ * parentConfigs: {string[]} // name of the parent configs
* configGroup: {string},
* value: {string},
* serviceName: {string},
@@ -63,7 +64,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
* }
* @private
*/
- _dependentConfigValues: [],
+ _dependentConfigValues: Em.A([]),
/**
* dependent properties that was changed by Ambari
@@ -168,9 +169,9 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
/**
* sends request to get values for dependent configs
- * @param changedConfigs
- * @param initial
- * @param onComplete
+ * @param {Object[]} changedConfigs - list of changed configs to track recommendations
+ * @param {Boolean} initial
+ * @param {Function} onComplete
* @returns {$.ajax|null}
*/
getRecommendationsForDependencies: function(changedConfigs, initial, onComplete) {
@@ -220,7 +221,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
* @method dependenciesSuccess
*/
dependenciesSuccess: function (data, opt, params) {
- this._saveRecommendedValues(data, params.initial);
+ this._saveRecommendedValues(data, params.initial, params.dataToSend.changed_configurations);
this._updateDependentConfigs();
},
@@ -378,14 +379,16 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
/**
* saves values from response for dependent configs to <code>_dependentConfigValues<code>
- * @param data
+ * @param data - JSON response from `recommendations` endpoint
* @param updateOnlyBoundaries
+ * @param {App.ServiceConfigProperty[]} parentConfigs - config properties for which recommendations were recieved
* @method saveRecommendedValues
* @private
*/
- _saveRecommendedValues: function(data, updateOnlyBoundaries) {
+ _saveRecommendedValues: function(data, updateOnlyBoundaries, parentConfigs) {
Em.assert('invalid data - `data.resources[0].recommendations.blueprint.configurations` not defined ', data && data.resources[0] && Em.get(data.resources[0], 'recommendations.blueprint.configurations'));
var configs = data.resources[0].recommendations.blueprint.configurations;
+ var parentPropertiesNames = parentConfigs ? parentConfigs.mapProperty('name') : [];
/** get all configs by config group **/
var stepConfigsByGroup = this._getConfigsByGroup(this.get('stepConfigs'));
for (var key in configs) {
@@ -410,6 +413,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
if (value != configs[key].properties[propertyName]) {
Em.set(dependentProperty, 'value', value);
Em.set(dependentProperty, 'recommendedValue', configs[key].properties[propertyName]);
+ Em.set(dependentProperty, 'parentConfigs', dependentProperty.parentConfigs.concat(parentPropertiesNames).uniq());
}
} else {
if (value != configs[key].properties[propertyName]) {
@@ -420,6 +424,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
propertyName: propertyName,
configGroup: group ? group.get('name') : service.get('displayName') + " Default",
value: value,
+ parentConfigs: parentPropertiesNames,
serviceName: serviceName,
allowChangeGroup: serviceName != this.get('content.serviceName') && !this.get('selectedConfigGroup.isDefault'),
serviceDisplayName: service.get('displayName'),
http://git-wip-us.apache.org/repos/asf/ambari/blob/26472889/ambari-web/app/mixins/unit_convert/base_unit_convert_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/unit_convert/base_unit_convert_mixin.js b/ambari-web/app/mixins/unit_convert/base_unit_convert_mixin.js
index 4ba70a3..3863c43 100644
--- a/ambari-web/app/mixins/unit_convert/base_unit_convert_mixin.js
+++ b/ambari-web/app/mixins/unit_convert/base_unit_convert_mixin.js
@@ -205,4 +205,5 @@ App.BaseUnitConvertMixin = Em.Mixin.create({
}
return isInt(value) ? value : parseFloat(value.toFixed(2));
}
+
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/26472889/ambari-web/app/views/common/configs/widgets/config_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/widgets/config_widget_view.js b/ambari-web/app/views/common/configs/widgets/config_widget_view.js
index 8598754..465439c 100644
--- a/ambari-web/app/views/common/configs/widgets/config_widget_view.js
+++ b/ambari-web/app/views/common/configs/widgets/config_widget_view.js
@@ -104,9 +104,12 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
* @method restoreValue
*/
restoreValue: function () {
+ var self = this;
this.set('config.value', this.get('config.defaultValue'));
this.get('controller').removeCurrentFromDependentList(this.get('config'));
- this.sendRequestRorDependentConfigs(this.get('config'));
+ this.sendRequestRorDependentConfigs(this.get('config')).done(function() {
+ self.restoreDependentConfigs(self.get('config'));
+ });
if (this.get('config.supportsFinal')) {
this.get('config').set('isFinal', this.get('config.defaultIsFinal'));
http://git-wip-us.apache.org/repos/asf/ambari/blob/26472889/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js b/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js
index 6cb0602..fcdb412 100644
--- a/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js
+++ b/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js
@@ -246,18 +246,20 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
self.set('config.value', '' + self.configValueByWidget(val));
self.set('mirrorValue', val);
}).on('slideStop', function() {
- /**
- * action to run sendRequestRorDependentConfigs when
- * we have changed config value within slider
- */
- self.get('controller').removeCurrentFromDependentList(self.get('config'));
- self.sendRequestRorDependentConfigs(self.get('config'));
- });
+ /**
+ * action to run sendRequestRorDependentConfigs when
+ * we have changed config value within slider
+ */
+ self.get('controller').removeCurrentFromDependentList(self.get('config'));
+ self.sendRequestRorDependentConfigs(self.get('config'));
+ });
this.set('slider', slider);
var sliderTicks = this.$('.ui-slider-wrapper:eq(0) .slider-tick');
- sliderTicks.eq(defaultValueId).addClass('slider-tick-default').on('click', function() {
+ sliderTicks.eq(defaultValueId).addClass('slider-tick-default').on('mousedown', function(e) {
+ if (self.get('disabled')) return false;
self.restoreValue();
+ e.stopPropagation();
});
// if mirrored value was added need to hide the tick for it
if (defaultValueMirroredId) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/26472889/ambari-web/app/views/common/controls_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/controls_view.js b/ambari-web/app/views/common/controls_view.js
index b661a8b..284f479 100644
--- a/ambari-web/app/views/common/controls_view.js
+++ b/ambari-web/app/views/common/controls_view.js
@@ -70,9 +70,13 @@ App.SupportsDependentConfigs = Ember.Mixin.create({
this.get('controller').removeCurrentFromDependentList(this.get('serviceConfig'));
}
},
+
/**
* method send request to check if some of dependent configs was changes
* and in case there was changes shows popup with info about changed configs
+ *
+ * @param {App.ServiceConfigProperty} config
+ * @returns {$.Deferred}
*/
sendRequestRorDependentConfigs: function(config) {
if (App.get('supports.enhancedConfigs') && ['mainServiceInfoConfigsController','wizardStep7Controller'].contains(this.get('controller.name'))) {
@@ -80,13 +84,41 @@ App.SupportsDependentConfigs = Ember.Mixin.create({
var type = App.config.getConfigTagFromFileName(config.get('filename'));
var p = App.StackConfigProperty.find(name + '_' + type);
if (p && p.get('propertyDependedBy.length') > 0) {
- this.get('controller').getRecommendationsForDependencies([{
+ return this.get('controller').getRecommendationsForDependencies([{
"type": type,
"name": name
}]);
}
}
+
+ return $.Deferred().resolve().promise();
+ },
+
+ /**
+ * Restore values for dependent configs by parent config info.
+ * NOTE: If dependent config inherited from multiply configs its
+ * value will be restored only when all parent configs are being restored.
+ *
+ * @param {App.ServiceConfigProperty} parentConfig
+ */
+ restoreDependentConfigs: function(parentConfig) {
+ var controller = this.get('controller');
+ var dependentConfigs = controller.get('_dependentConfigValues');
+ if (controller._updateDependentConfigs) {
+ controller._updateDependentConfigs();
+ controller.set('_dependentConfigValues', dependentConfigs.reject(function(item) {
+ if (item.parentConfigs.contains(parentConfig.get('name'))) {
+ if (item.parentConfigs.length > 1) {
+ item.parentConfigs.removeObject(parentConfig.get('name'));
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }));
+ }
}
+
});
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/26472889/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js b/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js
index 9d0f7db..823033b 100644
--- a/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js
+++ b/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js
@@ -149,4 +149,56 @@ describe('App.ConfigWidgetView', function () {
});
+ describe('#restoreDependentConfigs', function() {
+ beforeEach(function() {
+ view = App.ConfigWidgetView.create({
+ controller: Em.Object.create({
+ _updateDependentConfigs: function() {}
+ }),
+ config: Em.Object.create({ name: 'config1'})
+ });
+ });
+
+ var tests = [
+ {
+ dependentConfigs: [
+ {name: 'dependent1', parentConfigs: ['config1']},
+ {name: 'dependent2', parentConfigs: ['config2']},
+ {name: 'dependent3', parentConfigs: ['config1']}
+ ],
+ e: ['dependent2'],
+ m: 'when dependent configs has one parent they should be removed'
+ },
+ {
+ dependentConfigs: [
+ {name: 'dependent1', parentConfigs: ['config1', 'config2']},
+ {name: 'dependent2', parentConfigs: ['config2']},
+ {name: 'dependent3', parentConfigs: ['config1']}
+ ],
+ e: ['dependent1', 'dependent2'],
+ m: 'when dependent configs has multiple parents they should not be removed'
+ }
+ ];
+
+ tests.forEach(function(test) {
+ it(test.m, function() {
+ view.set('controller._dependentConfigValues', test.dependentConfigs);
+ view.restoreDependentConfigs(view.get('config'));
+ expect(view.get('controller._dependentConfigValues').mapProperty('name')).to.be.eql(test.e);
+ });
+ });
+
+ it('when dependent configs has multiple parents appropriate parent config should be removed', function() {
+ view.set('controller._dependentConfigValues', [
+ {name: 'dependent1', parentConfigs: ['config1', 'config2']},
+ {name: 'dependent2', parentConfigs: ['config2', 'config1']},
+ {name: 'dependent3', parentConfigs: ['config1']}
+ ]);
+ view.restoreDependentConfigs(view.get('config'));
+ expect(view.get('controller._dependentConfigValues').findProperty('name', 'dependent1').parentConfigs.toArray()).to.be.eql(["config2"]);
+ expect(view.get('controller._dependentConfigValues').findProperty('name', 'dependent2').parentConfigs.toArray()).to.be.eql(["config2"]);
+ expect(view.get('controller._dependentConfigValues.length')).to.be.eql(2);
+ });
+
+ });
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/26472889/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js b/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js
index 01e184a..4497eb8 100644
--- a/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js
+++ b/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js
@@ -115,9 +115,11 @@ describe('App.ListConfigWidgetView', function () {
describe('#restoreValue', function () {
beforeEach(function() {
+ sinon.stub(view, 'restoreDependentConfigs', Em.K);
sinon.stub(view.get('controller'), 'removeCurrentFromDependentList', Em.K)
});
afterEach(function() {
+ view.restoreDependentConfigs.restore();
view.get('controller.removeCurrentFromDependentList').restore();
});
it('should restore default value', function () {