AMBARI-18931. Can't change capacity-scheduler's queue capacity from the YARN 
config page, even though its shown as text box (akovalenko)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 23905571a809131343295f259483835a25e2c840
Parents: 8b09393
Author: Aleksandr Kovalenko <[email protected]>
Authored: Fri Nov 18 18:49:23 2016 +0200
Committer: Aleksandr Kovalenko <[email protected]>
Committed: Fri Nov 18 23:03:12 2016 +0200

----------------------------------------------------------------------
 .../configs/config_recommendation_parser.js     | 20 +++++++++----
 .../common/configs/config_recommendations.js    |  2 +-
 .../mixins/common/configs/enhanced_configs.js   | 30 ++++++++++++++++----
 ambari-web/app/views/common/controls_view.js    | 11 +++++--
 4 files changed, 50 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/23905571/ambari-web/app/mixins/common/configs/config_recommendation_parser.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/app/mixins/common/configs/config_recommendation_parser.js 
b/ambari-web/app/mixins/common/configs/config_recommendation_parser.js
index b88cf62..b014ede 100644
--- a/ambari-web/app/mixins/common/configs/config_recommendation_parser.js
+++ b/ambari-web/app/mixins/common/configs/config_recommendation_parser.js
@@ -155,11 +155,21 @@ App.ConfigRecommendationParser = 
Em.Mixin.create(App.ConfigRecommendations, {
 
     Em.set(config, 'recommendedValue', recommendedValue);
     if (this.allowUpdateProperty(parentProperties, Em.get(config, 'name'), 
Em.get(config, 'filename'))) {
-      Em.setProperties(config, {
-        value: recommendedValue,
-        errorMessage: '',
-        warnMessage: ''
-      });
+      var allowConfigUpdate = true;
+      // workaround for capacity-scheduler
+      if (this.get('currentlyChangedConfig')) {
+        var cId = App.config.configId(this.get('currentlyChangedConfig.name'), 
this.get('currentlyChangedConfig.fileName'));
+        if (App.config.configId(config.get('name'), config.get('filename')) 
=== cId) {
+          allowConfigUpdate = false;
+        }
+      }
+      if (allowConfigUpdate) {
+        Em.setProperties(config, {
+          value: recommendedValue,
+          errorMessage: '',
+          warnMessage: ''
+        });
+      }
       if (!Em.isNone(recommendedValue) && !Em.get(config, 'hiddenBySection')) {
         Em.set(config, 'isVisible', true);
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/23905571/ambari-web/app/mixins/common/configs/config_recommendations.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/config_recommendations.js 
b/ambari-web/app/mixins/common/configs/config_recommendations.js
index 79d6f5d..7427a54 100644
--- a/ambari-web/app/mixins/common/configs/config_recommendations.js
+++ b/ambari-web/app/mixins/common/configs/config_recommendations.js
@@ -227,4 +227,4 @@ App.ConfigRecommendations = Em.Mixin.create({
     this.set('recommendations', filteredRecommendations);
   }
 
-});
\ No newline at end of file
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/23905571/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 f53b45d..f92aac1 100644
--- a/ambari-web/app/mixins/common/configs/enhanced_configs.js
+++ b/ambari-web/app/mixins/common/configs/enhanced_configs.js
@@ -62,6 +62,14 @@ App.EnhancedConfigsMixin = 
Em.Mixin.create(App.ConfigWithOverrideRecommendationP
    */
   isControllerSupportsEnhancedConfigs: Em.computed.existsIn('name', 
['wizardStep7Controller','mainServiceInfoConfigsController']),
 
+  /**
+   * Stores name and file name of changed config
+   * This used only for capacity-scheduler
+   *
+   * @property {object}
+   */
+  currentlyChangedConfig: null,
+
   dependenciesGroupMessage: 
Em.I18n.t('popup.dependent.configs.dependencies.for.groups'),
   /**
    * message fro alert box for dependent configs
@@ -94,7 +102,7 @@ App.EnhancedConfigsMixin = 
Em.Mixin.create(App.ConfigWithOverrideRecommendationP
   showSelectGroupsPopup: Em.computed.and('!selectedConfigGroup.isDefault', 
'selectedService.dependentServiceNames.length'),
 
   /**
-   * set default values for dependentGroups
+    * set default values for dependentGroups
    * @method setDependentGroups
    */
   setDependentGroups: function () {
@@ -189,6 +197,14 @@ App.EnhancedConfigsMixin = 
Em.Mixin.create(App.ConfigWithOverrideRecommendationP
       if (!stepConfigs.someProperty('serviceName', 'MISC')) {
         requiredTags.push({site: 'cluster-env', serviceName: 'MISC'});
       }
+      if (Em.isArray(changedConfigs) && 
changedConfigs.mapProperty('type').uniq()[0] === 'capacity-scheduler') {
+        this.set('currentlyChangedConfig', {
+          name: 'capacity-scheduler',
+          fileName: 'capacity-scheduler.xml'
+        });
+      } else {
+        this.set('currentlyChangedConfig', null);
+      }
 
       if (App.Service.find().someProperty('serviceName', 'HDFS') && 
!stepConfigs.someProperty('serviceName', 'HDFS')) {
         requiredTags.push({site: 'core-site', serviceName: 'HDFS'});
@@ -297,9 +313,13 @@ App.EnhancedConfigsMixin = 
Em.Mixin.create(App.ConfigWithOverrideRecommendationP
     return Boolean(this.get('selectedConfigGroup.isDefault') && 
!Em.isNone(this.get('recommendationsConfigs'))
       && !this.get('stepConfigs').filter(function(stepConfig) {
       return stepConfig.get('changedConfigProperties').filter(function(c) {
-        return !this.get('changedProperties').map(function(changed) {
+        var changedConfigIds = 
this.get('changedProperties').map(function(changed) {
           return App.config.configId(changed.propertyName, 
changed.propertyFileName);
-        }).contains(App.config.configId(c.get('name'), c.get('filename')));
+        });
+        if (this.get('currentlyChangedConfig')) {
+          return 
changedConfigIds.contains(App.config.configId(this.get('currentlyChangedConfig.name'),
 this.get('currentlyChangedConfig.fileName')));
+        }
+        return !changedConfigIds.contains(App.config.configId(c.get('name'), 
c.get('filename')));
       }, this).length;
     }, this).length);
   },
@@ -519,13 +539,13 @@ App.EnhancedConfigsMixin = 
Em.Mixin.create(App.ConfigWithOverrideRecommendationP
       Em.set(config, 'value', recommended);
     }
   },
-  
+
   saveInitialRecommendations: function() {
     this.get('recommendations').forEach(function (r) {
       this.get('initialRecommendations').pushObject(r);
     }, this);
   },
-  
+
   /**
    * disable saving recommended value for current config
    * @param config

http://git-wip-us.apache.org/repos/asf/ambari/blob/23905571/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 955fa80..1fd5fde 100644
--- a/ambari-web/app/views/common/controls_view.js
+++ b/ambari-web/app/views/common/controls_view.js
@@ -313,12 +313,19 @@ App.CapacitySceduler = App.ServiceConfigTextArea.extend({
     if (!config.get('isValid') && config.get('isNotDefaultValue')) return 
$.Deferred().resolve().promise();
     controller = controller || this.get('controller');
     if (controller && 
['mainServiceInfoConfigsController','wizardStep7Controller'].contains(controller.get('name')))
 {
-      return 
controller.loadConfigRecommendations(config.get('value').split('\n').map(function
 (_property) {
+      var schedulerConfigs = config.get('value').split('\n').map(function 
(_property) {
         return {
           "type": 'capacity-scheduler',
           "name": _property.split('=')[0]
         }
-      }));
+      });
+      if (!schedulerConfigs.someProperty('name', 'capacity-scheduler')) {
+        schedulerConfigs.push({
+          "type": 'capacity-scheduler',
+          "name": 'capacity-scheduler'
+        });
+      }
+      return controller.loadConfigRecommendations(schedulerConfigs);
     }
 
     return $.Deferred().resolve().promise();

Reply via email to