AMBARI-21497 Conflicts in the ambari config groups. (atkach)

Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/83e6f06a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/83e6f06a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/83e6f06a

Branch: refs/heads/branch-feature-AMBARI-21450
Commit: 83e6f06afba676e2e3adb1aac397dc69cd9456b0
Parents: d322f9d
Author: Andrii Tkach <[email protected]>
Authored: Thu Aug 3 12:16:15 2017 +0300
Committer: Andrii Tkach <[email protected]>
Committed: Thu Aug 3 12:16:15 2017 +0300

----------------------------------------------------------------------
 .../app/mixins/common/configs/configs_saver.js   | 12 +++++++++++-
 .../mixins/common/configs/enhanced_configs.js    | 12 +++++++++++-
 .../mixins/common/configs/configs_saver_test.js  | 19 +++++++++++++++++++
 .../common/configs/enhanced_configs_test.js      | 10 ++++++++++
 4 files changed, 51 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/83e6f06a/ambari-web/app/mixins/common/configs/configs_saver.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/configs_saver.js 
b/ambari-web/app/mixins/common/configs/configs_saver.js
index 5ceb611..12b6e15 100644
--- a/ambari-web/app/mixins/common/configs/configs_saver.js
+++ b/ambari-web/app/mixins/common/configs/configs_saver.js
@@ -149,7 +149,7 @@ App.ConfigsSaverMixin = Em.Mixin.create({
 
           var overriddenConfigs = this.getConfigsForGroup(configs, 
configGroup.get('name'));
 
-          if (Em.isArray(overriddenConfigs)) {
+          if (Em.isArray(overriddenConfigs) && 
this.isOverriddenConfigsModified(overriddenConfigs)) {
             var successCallback = this.get('content.serviceName') === 
serviceName ? 'putConfigGroupChangesSuccess' : null;
             this.saveGroup(overriddenConfigs, configGroup, 
this.get('serviceConfigVersionNote'), successCallback);
           }
@@ -158,6 +158,16 @@ App.ConfigsSaverMixin = Em.Mixin.create({
     }
   },
 
+  /**
+   * @param {Array} overriddenConfigs
+   * @returns {boolean}
+   */
+  isOverriddenConfigsModified: function(overriddenConfigs) {
+    return overriddenConfigs.some(function(config) {
+      return config.get('savedValue') !== config.get('value');
+    });
+  },
+
   /*********************************** 0. HELPERS 
********************************************/
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/83e6f06a/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 5668b8c..8b9c673 100644
--- a/ambari-web/app/mixins/common/configs/enhanced_configs.js
+++ b/ambari-web/app/mixins/common/configs/enhanced_configs.js
@@ -368,7 +368,7 @@ App.EnhancedConfigsMixin = 
Em.Mixin.create(App.ConfigWithOverrideRecommendationP
       var configFroGroup = recommendations['config-groups'][0];
       this.get('stepConfigs').forEach(function(stepConfig) {
         var configGroup = 
this.getGroupForService(stepConfig.get('serviceName'));
-        if (configGroup) {
+        if (configGroup && this.isConfigGroupAffected(configFroGroup.hosts, 
configGroup.get('hosts'))) {
           this.updateOverridesByRecommendations(configFroGroup.configurations, 
stepConfig.get('configs'), changedConfigs, configGroup);
           
this.updateOverridesByRecommendations(configFroGroup.dependent_configurations, 
stepConfig.get('configs'), changedConfigs, configGroup);
           this.toggleProperty('forceUpdateBoundaries');
@@ -385,6 +385,16 @@ App.EnhancedConfigsMixin = 
Em.Mixin.create(App.ConfigWithOverrideRecommendationP
   },
 
   /**
+   * determine whether hosts of group affected by config modifications
+   * @param {Array} affectedHosts
+   * @param {Array} groupHosts
+   * @returns {boolean}
+   */
+  isConfigGroupAffected: function(affectedHosts, groupHosts) {
+    return _.intersection(affectedHosts, groupHosts).length > 0;
+  },
+
+  /**
    * method to show popup with dependent configs
    * @method showChangedDependentConfigs
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/83e6f06a/ambari-web/test/mixins/common/configs/configs_saver_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/configs/configs_saver_test.js 
b/ambari-web/test/mixins/common/configs/configs_saver_test.js
index 89f08e9..b0258a3 100644
--- a/ambari-web/test/mixins/common/configs/configs_saver_test.js
+++ b/ambari-web/test/mixins/common/configs/configs_saver_test.js
@@ -284,5 +284,24 @@ describe('App.ConfigsSaverMixin', function() {
       
expect(instanceObject.getModifiedConfigs(configs).mapProperty('filename').uniq()).to.eql(['f1','f2','f3']);
     });
   });
+
+  describe('#isOverriddenConfigsModified', function() {
+    it('no configs modified', function() {
+      expect(instanceObject.isOverriddenConfigsModified([
+        Em.Object.create({
+          savedValue: '1',
+          value: '1'
+        })
+      ])).to.be.false;
+    });
+    it('one config modified', function() {
+      expect(instanceObject.isOverriddenConfigsModified([
+        Em.Object.create({
+          savedValue: '1',
+          value: '2'
+        })
+      ])).to.be.true;
+    });
+  });
 });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/83e6f06a/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/configs/enhanced_configs_test.js 
b/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
index 3a41dc9..acce70d 100644
--- a/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
+++ b/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
@@ -307,5 +307,15 @@ describe('App.EnhancedConfigsMixin', function() {
       
expect(instanceObject.filterRequiredChanges(recommendations)).to.be.eql(recommendations);
     });
   });
+
+  describe('#isConfigGroupAffected', function() {
+    it('groups have no shared hosts', function() {
+      expect(instanceObject.isConfigGroupAffected(['host1'], 
['host2'])).to.be.false;
+    });
+    it('groups have shared hosts', function() {
+      expect(instanceObject.isConfigGroupAffected(['host1'], ['host2', 
'host1'])).to.be.true;
+    });
+  });
+
 });
 

Reply via email to