Browse Source

AMBARI-11248. Config Override issue (onechiporenko)

Oleg Nechiporenko 10 years ago
parent
commit
15616fd67c

+ 6 - 2
ambari-web/app/controllers/main/service/info/configs.js

@@ -179,8 +179,10 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
   errorsCount: function () {
   errorsCount: function () {
     return this.get('selectedService.configs').filter(function (config) {
     return this.get('selectedService.configs').filter(function (config) {
       return Em.isNone(config.get('widget'));
       return Em.isNone(config.get('widget'));
-    }).filterProperty('isValid', false).filterProperty('isVisible').length;
-  }.property('selectedService.configs.@each.isValid'),
+    }).filter(function(config) {
+      return !config.get('isValid') || (config.get('overrides') || []).someProperty('isValid', false);
+    }).filterProperty('isVisible').length;
+  }.property('selectedService.configs.@each.isValid', 'selectedService.configs.@each.overrideErrorTrigger'),
 
 
   /**
   /**
    * Determines if Save-button should be disabled
    * Determines if Save-button should be disabled
@@ -370,6 +372,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
    * @method onConfigGroupChange
    * @method onConfigGroupChange
    */
    */
   onConfigGroupChange: function () {
   onConfigGroupChange: function () {
+    console.time('!!!!!!!!!');
     var self = this;
     var self = this;
     this.get('stepConfigs').clear();
     this.get('stepConfigs').clear();
     var selectedConfigGroup = this.get('selectedConfigGroup');
     var selectedConfigGroup = this.get('selectedConfigGroup');
@@ -418,6 +421,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
         } else {
         } else {
           self.onLoadOverrides(self.get('allConfigs'));
           self.onLoadOverrides(self.get('allConfigs'));
         }
         }
+        console.timeEnd('!!!!!!!!!');
       });
       });
     });
     });
   }.observes('selectedConfigGroup'),
   }.observes('selectedConfigGroup'),

+ 5 - 2
ambari-web/app/controllers/wizard/step7_controller.js

@@ -133,8 +133,10 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
   errorsCount: function () {
   errorsCount: function () {
     return this.get('selectedService.configs').filter(function (config) {
     return this.get('selectedService.configs').filter(function (config) {
       return Em.isNone(config.get('widget'));
       return Em.isNone(config.get('widget'));
-    }).filterProperty('isValid', false).filterProperty('isVisible').length;
-  }.property('selectedService.configs.@each.isValid'),
+    }).filter(function(config) {
+      return !config.get('isValid') || (config.get('overrides') || []).someProperty('isValid', false);
+    }).filterProperty('isVisible').length;
+  }.property('selectedService.configs.@each.isValid', 'selectedService.configs.@each.overrideErrorTrigger'),
 
 
   /**
   /**
    * Should Next-button be disabled
    * Should Next-button be disabled
@@ -477,6 +479,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
         serviceConfigProperty.set('overrides', parentOverridesArray);
         serviceConfigProperty.set('overrides', parentOverridesArray);
       }
       }
       serviceConfigProperty.get('overrides').pushObject(newSCP);
       serviceConfigProperty.get('overrides').pushObject(newSCP);
+      newSCP.validate();
     }, this);
     }, this);
     return serviceConfigProperty;
     return serviceConfigProperty;
   },
   },

+ 1 - 1
ambari-web/app/models/configs/objects/service_config.js

@@ -50,7 +50,7 @@ App.ServiceConfig = Ember.Object.extend({
       if (item.get('overrides')) {
       if (item.get('overrides')) {
         item.get('overrides').forEach(function (e) {
         item.get('overrides').forEach(function (e) {
           if (e.error) {
           if (e.error) {
-            if (category) {
+            if (category && !Em.get(e, 'parentSCP.widget')) {
               category.incrementProperty('nonSlaveErrorCount');
               category.incrementProperty('nonSlaveErrorCount');
             }
             }
             overrideErrors++;
             overrideErrors++;

+ 11 - 3
ambari-web/app/models/configs/objects/service_config_property.js

@@ -119,8 +119,16 @@ App.ServiceConfigProperty = Em.Object.extend({
    * @type {boolean}
    * @type {boolean}
    */
    */
   hasIssues: function () {
   hasIssues: function () {
-    return (this.get('errorMessage') + this.get('warnMessage')) !== "";
-  }.property('errorMessage', 'warnMessage'),
+    var originalSCPIssued = (this.get('errorMessage') + this.get('warnMessage')) !== "";
+    var overridesIssue = false;
+    (this.get('overrides') || []).forEach(function(override) {
+      if (override.get('errorMessage') + override.get('warnMessage') !== "") {
+        overridesIssue = true;
+        return;
+      }
+    });
+    return originalSCPIssued || overridesIssue;
+  }.property('errorMessage', 'warnMessage', 'overrideErrorTrigger'),
 
 
   overrideErrorTrigger: 0, //Trigger for overridable property error
   overrideErrorTrigger: 0, //Trigger for overridable property error
   isRestartRequired: false,
   isRestartRequired: false,
@@ -470,4 +478,4 @@ App.ServiceConfigProperty = Em.Object.extend({
     return isError;
     return isError;
   }
   }
 
 
-});
+});

+ 4 - 2
ambari-web/app/models/configs/sub_section.js

@@ -77,8 +77,10 @@ App.SubSection = DS.Model.extend({
    * @type {number}
    * @type {number}
    */
    */
   errorsCount: function () {
   errorsCount: function () {
-    return this.get('configs').filterProperty('isValid', false).length;
-  }.property('configs.@each.isValid'),
+    return this.get('configs').filter(function(config) {
+      return !config.get('isValid') || (config.get('overrides') || []).someProperty('isValid', false);
+    }).length;
+  }.property('configs.@each.isValid', 'configs.@each.overrideErrorTrigger'),
 
 
   /**
   /**
    * @type {boolean}
    * @type {boolean}

+ 3 - 0
ambari-web/app/styles/widgets.less

@@ -259,6 +259,9 @@
   }
   }
   .overrideField {
   .overrideField {
     margin-top: 30px;
     margin-top: 30px;
+    .ui-slider-wrapper-inner {
+      padding-top: 20px;
+    }
   }
   }
 }
 }
 .slider-disabled {
 .slider-disabled {

+ 10 - 2
ambari-web/app/views/common/configs/widgets/config_widget_view.js

@@ -178,9 +178,17 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
      */
      */
     issuedConfig: function() {
     issuedConfig: function() {
       var config = this.get('config');
       var config = this.get('config');
-      // check editable overrides
-      if (!config.get('isEditable') && config.get('overrides.length') && config.get('overrides').someProperty('isEditable', true)) {
+      // check editable override
+      if (!config.get('isEditable') && config.get('isOriginalSCP') && config.get('overrides.length') && config.get('overrides').someProperty('isEditable', true)) {
         config = config.get('overrides').findProperty('isEditable', true);
         config = config.get('overrides').findProperty('isEditable', true);
+      } else if (config.get('isOriginalSCP') && config.get('isEditable')) {
+        // use original config if it is not valid
+        if (!config.get('isValid')) {
+          return config;
+        // scan overrides for non valid values and use it
+        } else if (config.get('overrides.length') && config.get('overrides').someProperty('isValid', false)) {
+          return config.get('overrides').findProperty('isValid', false);
+        }
       }
       }
       return config;
       return config;
     }.property('config.isEditable', 'config.overrides.length')
     }.property('config.isEditable', 'config.overrides.length')

+ 2 - 7
ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js

@@ -228,13 +228,8 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
           warn: true
           warn: true
         });
         });
       } else {
       } else {
-        this.set('isMirrorValueValid', true);
-        this.get('config').setProperties({
-          warnMessage: '',
-          errorMessage: '',
-          value: '' + this.configValueByWidget(parsed),
-          warn: false
-        });
+        this.set('isMirrorValueValid', !this.get('config.error'));
+        this.set('config.value', '' + this.configValueByWidget(parsed));
         if (slider) {
         if (slider) {
           slider.setValue(parsed);
           slider.setValue(parsed);
         }
         }

+ 8 - 2
ambari-web/test/models/configs/section_test.js

@@ -29,8 +29,14 @@ describe('App.Section', function () {
 
 
     beforeEach(function () {
     beforeEach(function () {
       model.reopen({subSections: [
       model.reopen({subSections: [
-        App.SubSection.createRecord({configs: [{isValid: true}, {isValid: false}]}),
-        App.SubSection.createRecord({configs: [{isValid: true}, {isValid: false}]})
+        App.SubSection.createRecord({configs: [
+          App.ServiceConfigProperty.create({isValid: true}),
+          App.ServiceConfigProperty.create({isValid: false})
+        ]}),
+        App.SubSection.createRecord({configs: [
+          App.ServiceConfigProperty.create({isValid: true}),
+          App.ServiceConfigProperty.create({isValid: false})
+        ]})
       ]});
       ]});
     });
     });
 
 

+ 16 - 5
ambari-web/test/models/configs/sub_section_test.js

@@ -29,15 +29,26 @@ describe('App.SubSection', function () {
 
 
     beforeEach(function () {
     beforeEach(function () {
       model.set('configs', [
       model.set('configs', [
-        {isValid: false},
-        {isValid: true},
-        {isValid: false},
-        {isValid: true}
+        App.ServiceConfigProperty.create({isValid: true}),
+        App.ServiceConfigProperty.create({isValid: false}),
+        App.ServiceConfigProperty.create({isValid: false}),
+        App.ServiceConfigProperty.create({isValid: false}),
       ]);
       ]);
     });
     });
 
 
     it('should use configs.@each.isValid', function () {
     it('should use configs.@each.isValid', function () {
-      expect(model.get('errorsCount')).to.equal(2);
+      expect(model.get('errorsCount')).to.equal(3);
+    });
+
+    it('should use configs.@each.overrideErrorTrigger', function() {
+      // original value is valid
+      var validOriginalSCP = model.get('configs').objectAt(0);
+      // add override with not valid value
+      validOriginalSCP.set('overrides', [
+        App.ServiceConfigProperty.create({ isValid: false }),
+        App.ServiceConfigProperty.create({ isValid: true })
+      ]);
+      expect(model.get('errorsCount')).to.equal(4);
     });
     });
 
 
   });
   });

+ 3 - 3
ambari-web/test/views/common/configs/widgets/slider_config_widget_view_test.js

@@ -31,7 +31,7 @@ describe('App.SliderConfigWidgetView', function () {
         disable: Em.K,
         disable: Em.K,
         setValue: Em.K
         setValue: Em.K
       },
       },
-      config: Em.Object.create({
+      config: App.ServiceConfigProperty.create({
         name: 'a.b.c',
         name: 'a.b.c',
         description: 'A B C',
         description: 'A B C',
         value: '486',
         value: '486',
@@ -61,7 +61,7 @@ describe('App.SliderConfigWidgetView', function () {
         disable: Em.K,
         disable: Em.K,
         setValue: Em.K
         setValue: Em.K
       },
       },
-      config: Em.Object.create({
+      config: App.ServiceConfigProperty.create({
         name: 'a.b.c2',
         name: 'a.b.c2',
         description: 'A B C 2',
         description: 'A B C 2',
         value: '72.2',
         value: '72.2',
@@ -90,7 +90,7 @@ describe('App.SliderConfigWidgetView', function () {
         disable: Em.K,
         disable: Em.K,
         setValue: Em.K
         setValue: Em.K
       },
       },
-      config: Em.Object.create({
+      config: App.ServiceConfigProperty.create({
         name: 'a.b.c3',
         name: 'a.b.c3',
         description: 'A B C 3',
         description: 'A B C 3',
         value: '0.22',
         value: '0.22',