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/03 12:25:30 UTC

ambari git commit: AMBARI-10342 Dependent config changes not being shown to user. (ababiichuk)

Repository: ambari
Updated Branches:
  refs/heads/trunk 105a62060 -> f34f2df9c


AMBARI-10342 Dependent config changes not being shown to user. (ababiichuk)


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

Branch: refs/heads/trunk
Commit: f34f2df9c106b140dcd9c098dc19fadfcb4d8017
Parents: 105a620
Author: aBabiichuk <ab...@cybervisiontech.com>
Authored: Fri Apr 3 13:19:36 2015 +0300
Committer: aBabiichuk <ab...@cybervisiontech.com>
Committed: Fri Apr 3 13:19:36 2015 +0300

----------------------------------------------------------------------
 .../controllers/global/cluster_controller.js    |   4 +-
 .../controllers/main/service/info/configs.js    |  19 +-
 .../configs/stack_config_properties_mapper.js   |   4 +-
 .../mixins/common/configs/enhanced_configs.js   | 249 +++++++++----------
 ambari-web/app/models/service_config.js         |   3 +-
 .../configs/widgets/config_widget_view.js       |   2 +-
 .../widgets/slider_config_widget_view.js        |   8 +-
 7 files changed, 138 insertions(+), 151 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f34f2df9/ambari-web/app/controllers/global/cluster_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 9fd1a46..1dafc13 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -280,9 +280,7 @@ App.ClusterController = Em.Controller.extend({
         });
 
         updater.updateServiceMetric(function () {
-          if (App.get('supports.enhancedConfigs')) {
-            App.config.loadConfigsFromStack(App.Service.find().mapProperty('serviceName'));
-          }
+          App.config.loadConfigsFromStack(App.Service.find().mapProperty('serviceName'));
 
           updater.updateComponentConfig(function () {
             self.updateLoadStatus('componentConfigs');

http://git-wip-us.apache.org/repos/asf/ambari/blob/f34f2df9/ambari-web/app/controllers/main/service/info/configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js
index f9729e5..9a40545 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -770,6 +770,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
    * @method onLoadOverrides
    */
   onLoadOverrides: function (allConfigs) {
+    var self = this;
     var serviceNames = this.get('servicesToLoad');
     serviceNames.forEach(function(serviceName) {
       var serviceConfig = App.config.createServiceConfig(serviceName);
@@ -789,11 +790,13 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
     this.checkOverrideProperty(selectedService);
     this.checkDatabaseProperties(selectedService);
     this.checkForSecureConfig(this.get('selectedService'));
-    this.setProperties({
-      dataIsLoaded: true,
-      versionLoaded: true,
-      hash: this.getHash(),
-      isInit: false
+    this.getRecommendationsForDependencies(null, true, function() {
+      self.setProperties({
+        dataIsLoaded: true,
+        versionLoaded: true,
+        hash: self.getHash(),
+        isInit: false
+      });
     });
   },
 
@@ -2450,9 +2453,10 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
    * @param {object} serviceConfigProperty - config property object
    * @param {App.ConfigGroup} group - config group for new property
    * @param {String} value
+   * @param {boolean} isNotSaved TODO
    * @method addOverrideProperty
    */
-  addOverrideProperty: function (serviceConfigProperty, group, value) {
+  addOverrideProperty: function (serviceConfigProperty, group, value, isNotSaved) {
     if (serviceConfigProperty.get('isOriginalSCP')) {
       var overrides = serviceConfigProperty.get('overrides');
       if (!overrides) {
@@ -2466,7 +2470,8 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
         parentSCP: serviceConfigProperty,
         isEditable: true,
         group: group,
-        overrides: null
+        overrides: null,
+        isNotSaved: isNotSaved
       });
       console.debug("createOverrideProperty(): Added:", newSCP, " to main-property:", serviceConfigProperty);
       overrides.pushObject(newSCP);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f34f2df9/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
index 9220b3f..377095a 100644
--- a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
+++ b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
@@ -87,7 +87,9 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
    */
   mergeWithUI: function(config) {
     var uiConfigProperty = this.getUIConfig(config.StackConfigurations.property_name, config.StackConfigurations.type);
-    config.display_name = uiConfigProperty ? uiConfigProperty.displayName : config.StackConfigurations.display_name;
+    if (!config.StackConfigurations.property_display_name) {
+      config.StackConfigurations.property_display_name = uiConfigProperty && uiConfigProperty.displayName ? uiConfigProperty.displayName : config.StackConfigurations.property_name;
+    }
     config.category = uiConfigProperty ? uiConfigProperty.category : 'Advanced ' + App.config.getConfigTagFromFileName(config.StackConfigurations.type);
     config.display_type = uiConfigProperty ? uiConfigProperty.displayType : 'string';
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/f34f2df9/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 02738c5..549b783 100644
--- a/ambari-web/app/mixins/common/configs/enhanced_configs.js
+++ b/ambari-web/app/mixins/common/configs/enhanced_configs.js
@@ -51,6 +51,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
    * ex:
    * {
    *   saveRecommended: {boolean}, //by default is true (checkbox binding)
+   *   saveRecommendedDefault: {boolean}, used for cancel operation to restore previous state
    *   fileName: {string}, //file name without '.xml'
    *   propertyName: {string},
    *   configGroup: {string},
@@ -268,10 +269,13 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
   /**
    * sends request to get values for dependent configs
    * @param changedConfigs
+   * @param initial
+   * @param onComplete
    * @returns {$.ajax|null}
    */
-  getRecommendationsForDependencies: function(changedConfigs) {
-    if (Em.isArray(changedConfigs) && changedConfigs.length > 0) {
+  getRecommendationsForDependencies: function(changedConfigs, initial, onComplete) {
+    if (Em.isArray(changedConfigs) && changedConfigs.length > 0 || initial) {
+      var self = this;
       var recommendations = this.get('hostGroups');
       var configs = this._getConfigsByGroup(this.get('stepConfigs'));
       recommendations.blueprint.configurations = blueprintUtils.buildConfigsJSON(this.get('services'), configs);
@@ -282,7 +286,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
         services: this.get('serviceNames'),
         recommendations: recommendations
       };
-      if (App.get('supports.enhancedConfigs')) {
+      if (App.get('supports.enhancedConfigs') && changedConfigs) {
         dataToSend.recommend = 'configuration-dependencies';
         dataToSend.changed_configurations = changedConfigs;
       }
@@ -291,11 +295,17 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
         sender: this,
         data: {
           stackVersionUrl: App.get('stackVersionURL'),
-          dataToSend: dataToSend
+          dataToSend: dataToSend,
+          initial: initial
         },
         success: 'dependenciesSuccess',
         error: 'dependenciesError',
-        callback: this.onRecommendationsReceived.bind(this)
+        callback: function() {
+          self.onRecommendationsReceived();
+          if (onComplete) {
+            onComplete()
+          }
+        }
       });
     } else {
       return null;
@@ -315,18 +325,20 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
    * if case properties that was changes belongs to not default group
    * user should pick to what config group from dependent service dependent properties will be saved
    * @param data
+   * @param opt
+   * @param params
    * @method dependenciesSuccess
    */
-  dependenciesSuccess: function (data) {
+  dependenciesSuccess: function (data, opt, params) {
     var self = this;
     if (!this.get('selectedConfigGroup.isDefault')) {
       self.showSelectGroupsPopup(function () {
-        self._saveRecommendedValues(data);
-        self._saveDependentConfigs();
+        self._saveRecommendedValues(data, params.initial);
+        self._updateDependentConfigs(self.get('selectedConfigGroup.isDefault'));
       });
     } else {
-      self._saveRecommendedValues(data);
-      self._saveDependentConfigs();
+      self._saveRecommendedValues(data, params.initial);
+      self._updateDependentConfigs(self.get('selectedConfigGroup.isDefault'));
     }
   },
 
@@ -338,8 +350,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
     var self = this;
     if (self.get('_dependentConfigValues.length') > 0) {
       App.showDependentConfigsPopup(this.get('_dependentConfigValues'), function() {
-        self._saveDependentConfigs();
-        self._discardChanges();
+        self._updateDependentConfigs(self.get('selectedConfigGroup.isDefault'));
         if (callback) {
           callback();
         }
@@ -391,74 +402,56 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
 
   /**
    * save values that are stored in <code>_dependentConfigValues<code>
-   * for current service to step configs
-   * for dependent services to model
+   * to step configs
+   * @param isDefaultConfigGroup
    * @private
    */
-  _saveDependentConfigs: function() {
+  _updateDependentConfigs: function(isDefaultConfigGroup) {
     var self = this;
-    this.get('_dependentConfigValues').forEach(function(dependentConfig) {
-      if (Em.get(dependentConfig, 'saveRecommended')) { // if saveRecommended is false leave properties as is
-        self.get('stepConfigs').forEach(function(serviceConfigs) {
-          serviceConfigs.get('configs').forEach(function(stepConfig) {
-            if (stepConfig.get('filename') === App.config.getOriginalFileName(Em.get(dependentConfig, 'fileName'))
-              && stepConfig.get('name') === Em.get(dependentConfig, 'propertyName')) {
-              if (self.get('selectedConfigGroup.isDefault') || (self.get('groupsToSave')[Em.get(dependentConfig, 'serviceName')]
-                && self.get('groupsToSave')[Em.get(dependentConfig, 'serviceName')].contains('Default'))) {
-                stepConfig.set('value', Em.get(dependentConfig, 'recommendedValue'))
-              } else {
-                if (!stepConfig.get('overrides')) {
-                  stepConfig.set('overrides', Em.A([]));
-                }
-                var overridenConfig = stepConfig.get('overrides').findProperty('group.name', Em.get(dependentConfig, 'configGroup'));
-                if (overridenConfig) {
-                  overridenConfig.set('value', Em.get(dependentConfig, 'recommendedValue'));
-                } else {
-                  self.addOverrideProperty(stepConfig.set('isNotSaved', true), self.get('selectedConfigGroup'), Em.get(dependentConfig, 'recommendedValue'));
-                }
+    var dependentConfigs = this.get('_dependentConfigValues');
+    this.get('stepConfigs').forEach(function(serviceConfigs) {
+      var selectedGroup = self.getGroupForService(serviceConfigs.get('serviceName'));
+      serviceConfigs.get('configs').forEach(function(cp) {
+        var dependentConfig = dependentConfigs.filterProperty('propertyName', cp.get('name')).findProperty('fileName', App.config.getConfigTagFromFileName(cp.get('filename')));
+        if (dependentConfig) {
+          var valueToSave = dependentConfig.saveRecommended ? dependentConfig.recommendedValue : dependentConfig.value;
+          if (isDefaultConfigGroup || selectedGroup.get('isDefault')) {
+            cp.set('value', valueToSave);
+          } else {
+            var overridenConfig = cp.get('overrides') && cp.get('overrides').findProperty('group.name', selectedGroup.get('name'));
+            if (overridenConfig) {
+              overridenConfig.set('value', valueToSave);
+            }
+            if (dependentConfig.saveRecommended) {
+              if (!overridenConfig) {
+                self.addOverrideProperty(cp, selectedGroup, valueToSave, true);
+              }
+            } else {
+              if (overridenConfig && overridenConfig.get('isNotSaved')) {
+                cp.get('overrides').removeObject(overridenConfig);
               }
             }
-          })
-        });
-      }
+          }
+        }
+      })
     });
   },
 
   /**
-   * opposite to <code>_saveDependentConfigs<code>
-   * restore values that was before applying changes for dependent configs
-   * do this action only for properties that has <code>saveRecommended<code> - false
-   * @private
+   * get config group object for current service
+   * @param serviceName
+   * @returns {*}
    */
-  _discardChanges: function () {
-    var self = this;
-    this.get('_dependentConfigValues').forEach(function(dependentConfig) {
-      if (!Em.get(dependentConfig, 'saveRecommended')) { // if saveRecommended is false leave properties as is
-        self.get('stepConfigs').forEach(function(serviceConfigs) {
-          serviceConfigs.get('configs').forEach(function(stepConfig) {
-            if (stepConfig.get('filename') === App.config.getOriginalFileName(Em.get(dependentConfig, 'fileName'))
-              && stepConfig.get('name') === Em.get(dependentConfig, 'propertyName')) {
-              if (self.get('selectedConfigGroup.isDefault')) {
-                stepConfig.set('value', Em.get(dependentConfig, 'value'))
-              } else {
-                if (!stepConfig.get('overrides')) {
-                  stepConfig.set('overrides', Em.A([]));
-                }
-                var overridenConfig = stepConfig.get('overrides').findProperty('group.name', Em.get(dependentConfig, 'configGroup'));
-                if (overridenConfig) {
-                  if (overridenConfig.get('isNotSaved')) {
-                    stepConfig.get('overrides').removeObject(overridenConfig);
-                  } else {
-                    overridenConfig.set('value', Em.get(dependentConfig, 'value'));
-                  }
-                }
-              }
-            }
-          })
-        });
+  getGroupForService: function(serviceName) {
+    if (this.get('content.serviceName') === serviceName) {
+      return this.get('selectedConfigGroup')
+    } else {
+      if (this.get('selectedConfigGroup.isDefault')) {
+        return this.get('dependentConfigGroups').filterProperty('service.serviceName', serviceName).findProperty('isDefault');
+      } else {
+        return this.get('dependentConfigGroups').findProperty('name', this.get('groupsToSave')[serviceName]);
       }
-    });
-    this.set('recommendationTimeStamp', (new Date).getTime());
+    }
   },
 
   /**
@@ -471,60 +464,79 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
    * @private
    */
   _getConfigsByGroup: function(stepConfigs) {
-    var configsToSend = [];
     if (this.get('selectedConfigGroup.isDefault')) {
       return stepConfigs;
     } else {
+      var configsToSend = [];
+
       stepConfigs.forEach(function(serviceConfig) {
         var stepConfigToSend = [];
-        serviceConfig.get('configs').forEach(function(stepConfig) {
-          if (stepConfig.get('overrides')) {
-            var conf = stepConfig.get('overrides').findProperty('group.name', this.get('selectedConfigGroup.name'));
-            stepConfigToSend.pushObject(conf ? conf : stepConfig);
+        var group = this.getGroupForService(serviceConfig.get('serviceName'));
+        serviceConfig.get('configs').forEach(function(cp) {
+          if (group && !group.get('isDefault') && cp.get('overrides')) {
+            var conf = cp.get('overrides').findProperty('group.name', group.get('name'));
+            stepConfigToSend.pushObject(conf ? conf : cp);
           } else {
-            stepConfigToSend.pushObject(stepConfig);
+            stepConfigToSend.pushObject(cp);
           }
         }, this);
-        configsToSend.pushObject(stepConfigToSend);
-      }, this)
+        App.config.createServiceConfig(serviceConfig.get('serviceName'));
+        var stepConfig =  App.config.createServiceConfig(serviceConfig.get('serviceName'));
+        stepConfig.set('configs', stepConfigToSend);
+        configsToSend.pushObject(stepConfig);
+      }, this);
+
+      return configsToSend;
     }
-    return configsToSend;
   },
 
   /**
    * saves values from response for dependent configs to <code>_dependentConfigValues<code>
    * @param data
+   * @param updateOnlyBoundaries
    * @method saveRecommendedValues
    * @private
    */
-  _saveRecommendedValues: function(data) {
+  _saveRecommendedValues: function(data, updateOnlyBoundaries) {
     Em.assert('invalid data', data && data.resources[0] && Em.get(data.resources[0], 'recommendations.blueprint.configurations'));
     var configs = data.resources[0].recommendations.blueprint.configurations;
+    /** get all configs by config group **/
+    var stepConfigsByGroup = this._getConfigsByGroup(this.get('stepConfigs'));
     for (var key in configs) {
+
+      /**  defines main info for file name (service name, config group, config that belongs to filename) **/
+      var serviceName = App.config.getServiceByConfigType(key).get('serviceName');
+      var stepConfig = stepConfigsByGroup.findProperty('serviceName', serviceName);
+      var configProperties = stepConfig ? stepConfig.get('configs').filterProperty('filename', App.config.getOriginalFileName(key)) : [];
+
+      var group = this.getGroupForService(serviceName);
+
       for (var propertyName in configs[key].properties) {
-        var service = App.config.getServiceByConfigType(key);
-        var value = this._getCurrentValue(service.get('serviceName'), key, propertyName, this.get('selectedConfigGroup'));
+        /**  if property exists and has value **/
+        var cp = configProperties.findProperty('name', propertyName);
+        var value = cp && cp.get('value');
+
         if (!Em.isNone(value)) {
-          var dependentProperty = this.get('_dependentConfigValues').findProperty('propertyName', propertyName);
-          if (dependentProperty) {
-            if (value != configs[key].properties[propertyName]) {
-              Em.set(dependentProperty, 'value', value);
-              Em.set(dependentProperty, 'recommendedValue', configs[key].properties[propertyName]);
-            }
-          } else {
-            var configGroup = this.get('selectedConfigGroup.isDefault') ?
-              service.get('serviceName') + ' Default' : this.get('groupsToSave')[service.get('serviceName')] || this.get('selectedConfigGroup.name');
-            if (value != configs[key].properties[propertyName]) {
-              this.get('_dependentConfigValues').pushObject({
-                saveRecommended: true,
-                saveRecommendedDefault: true,
-                fileName: key,
-                propertyName: propertyName,
-                configGroup: configGroup,
-                value: value,
-                serviceName: service.get('serviceName'),
-                recommendedValue: configs[key].properties[propertyName]
-              });
+          if (!updateOnlyBoundaries) { //on first initial request we don't need to change values
+            var dependentProperty = this.get('_dependentConfigValues').findProperty('propertyName', propertyName);
+            if (dependentProperty) {
+              if (value != configs[key].properties[propertyName]) {
+                Em.set(dependentProperty, 'value', value);
+                Em.set(dependentProperty, 'recommendedValue', configs[key].properties[propertyName]);
+              }
+            } else {
+              if (value != configs[key].properties[propertyName]) {
+                this.get('_dependentConfigValues').pushObject({
+                  saveRecommended: true,
+                  saveRecommendedDefault: true,
+                  fileName: key,
+                  propertyName: propertyName,
+                  configGroup: group.get('name'),
+                  value: value,
+                  serviceName: serviceName,
+                  recommendedValue: configs[key].properties[propertyName]
+                });
+              }
             }
           }
           /**
@@ -540,42 +552,13 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
               if (configs[key].property_attributes[propertyName].max) {
                 stackProperty.set('valueAttributes.maximum', configs[key].property_attributes[propertyName].max);
               }
+              if (configs[key].property_attributes[propertyName].step) {
+                stackProperty.set('valueAttributes.step', configs[key].property_attributes[propertyName].step);
+              }
             }
           }
         }
       }
     }
-  },
-
-  /**
-   * get current value for property by serviceName, tag and ConfigGroup
-   * @param serviceName
-   * @param tag
-   * @param propertyName
-   * @param configGroup
-   * @returns {null|Object}
-   * @private
-   */
-  _getCurrentValue: function (serviceName, tag, propertyName, configGroup) {
-    var serviceConfig = this.get('stepConfigs').findProperty('serviceName', serviceName);
-    var groupForService = serviceName == this.get('content.serviceName') ? configGroup.get('name') : this.get('groupsToSave')[serviceName];
-    if (serviceConfig) {
-      var stepConfig = serviceConfig.get('configs').find(function (stepConfig) {
-        return (stepConfig.get('filename') === App.config.getOriginalFileName(tag) && stepConfig.get('name') === propertyName);
-      });
-      if (stepConfig) {
-        if (configGroup.get('isDefault') || Em.isNone(stepConfig.get('overrides'))) {
-          return stepConfig.get('value');
-        } else {
-          var overridenConfig = stepConfig.get('overrides').findProperty('group.name', groupForService);
-          if (overridenConfig) {
-            return overridenConfig.get('value');
-          } else {
-            return stepConfig.get('value');
-          }
-        }
-      }
-    }
-    return null;
   }
 });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/f34f2df9/ambari-web/app/models/service_config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/service_config.js b/ambari-web/app/models/service_config.js
index 7b1f08b..3913fb4 100644
--- a/ambari-web/app/models/service_config.js
+++ b/ambari-web/app/models/service_config.js
@@ -271,8 +271,7 @@ App.ServiceConfigProperty = Em.Object.extend({
     var supportsFinal = this.get('supportsFinal');
     var isFinal = this.get('isFinal');
     var defaultIsFinal = this.get('defaultIsFinal');
-    var isEditable = this.get('isEditable');
-    return isEditable && ((defaultValue != null && value !== defaultValue) || (supportsFinal && isFinal !== defaultIsFinal));
+    return (defaultValue != null && value !== defaultValue) || (supportsFinal && isFinal !== defaultIsFinal);
   }.property('value', 'defaultValue', 'isEditable', 'isFinal', 'defaultIsFinal'),
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/f34f2df9/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 ba441b5..a1aaeab 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
@@ -56,7 +56,7 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
    * @type {String}
    */
   configLabel: function() {
-    return this.get('config.displayName') || this.get('config.name');
+    return this.get('config.stackConfigProperty.displayName') || this.get('config.displayName') || this.get('config.name');
   }.property('config.name', 'config.displayName'),
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f34f2df9/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 8098337..8e00238 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
@@ -51,11 +51,11 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
       if (self.get('slider')) {
         self.get('slider').destroy();
         self.initSlider();
-        if (self.get('config.value') > valueAttributes.get('maximum')) {
-          self.set('mirrorValue', valueAttributes.get('maximum'))
+        if (self.get('config.value') > Em.get(valueAttributes, 'maximum')) {
+          self.set('mirrorValue', Em.get(valueAttributes, 'maximum'))
         }
-        if (self.get('config.value') < valueAttributes.get('minimum')) {
-          self.set('mirrorValue', valueAttributes.get('minimum'))
+        if (self.get('config.value') < Em.get(valueAttributes, 'minimum')) {
+          self.set('mirrorValue', Em.get(valueAttributes, 'minimum'))
         }
       }
     })