AMBARI-6537 Add Service Wizard: adding a service turns on restart indicator for 
all services. (Buzhor Denys via ababiichuk)


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

Branch: refs/heads/trunk
Commit: 4a2307c6e21c386fbe2e421ca41916601e780728
Parents: 7781586
Author: aBabiichuk <ababiic...@cybervisiontech.com>
Authored: Fri Jul 18 12:57:53 2014 +0300
Committer: aBabiichuk <ababiic...@cybervisiontech.com>
Committed: Fri Jul 18 12:57:53 2014 +0300

----------------------------------------------------------------------
 ambari-web/app/controllers/installer.js         |  2 +-
 .../app/controllers/main/admin/security.js      | 26 +++---
 .../controllers/main/service/info/configs.js    |  9 +-
 ambari-web/app/controllers/wizard.js            | 19 +++--
 .../app/controllers/wizard/step7_controller.js  | 88 ++++++++++----------
 .../app/controllers/wizard/step8_controller.js  | 74 +++++++++-------
 ambari-web/app/utils/config.js                  |  1 +
 7 files changed, 119 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4a2307c6/ambari-web/app/controllers/installer.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/installer.js 
b/ambari-web/app/controllers/installer.js
index 00f186a..a563ec2 100644
--- a/ambari-web/app/controllers/installer.js
+++ b/ambari-web/app/controllers/installer.js
@@ -58,7 +58,7 @@ App.InstallerController = App.WizardController.extend({
     'selectedServiceNames',
     'serviceConfigGroups',
     'serviceConfigProperties',
-    'configsToUpdate',
+    'fileNamesToUpdate',
     'bootStatus',
     'stacksVersions',
     'currentStep',

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a2307c6/ambari-web/app/controllers/main/admin/security.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/security.js 
b/ambari-web/app/controllers/main/admin/security.js
index 8ed62c5..308fc80 100644
--- a/ambari-web/app/controllers/main/admin/security.js
+++ b/ambari-web/app/controllers/main/admin/security.js
@@ -288,19 +288,21 @@ App.MainAdminSecurityController = Em.Controller.extend({
         tagName: this.get('tag.hdfs-site')
       }
     ];
+    var self = this;
 
-    var data = 
App.router.get('configurationController').getConfigsByTags(tags);
-    var configs = data.findProperty('tag', 
this.get('tag.hadoop-env')).properties;
-    if (configs && (configs['security_enabled'] === 'true' || 
configs['security_enabled'] === true)) {
-      this.set('securityEnabled', true);
-    }
-    else {
-      this.set('securityEnabled', false);
-      var hdfsConfigs = data.findProperty('tag', 
this.get('tag.hdfs-site')).properties;
-      this.setNnHaStatus(hdfsConfigs);
-    }
-    this.loadUsers(configs);
-    this.set('dataIsLoaded', true);
+    
App.router.get('configurationController').getConfigsByTags(tags).done(function(data)
 {
+      var configs = data.findProperty('tag', 
self.get('tag.hadoop-env')).properties;
+      if (configs && (configs['security_enabled'] === 'true' || 
configs['security_enabled'] === true)) {
+        self.set('securityEnabled', true);
+      }
+      else {
+        self.set('securityEnabled', false);
+        var hdfsConfigs = data.findProperty('tag', 
self.get('tag.hdfs-site')).properties;
+        self.setNnHaStatus(hdfsConfigs);
+      }
+      self.loadUsers(configs);
+      self.set('dataIsLoaded', true);
+    });
   },
 
   setNnHaStatus: function (hdfsConfigs) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a2307c6/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 27d9967..24e20e7 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -1667,12 +1667,11 @@ App.MainServiceInfoConfigsController = 
Em.Controller.extend({
     var heapsizeException = ['hadoop_heapsize', 'yarn_heapsize', 
'nodemanager_heapsize', 'resourcemanager_heapsize', 
'apptimelineserver_heapsize', 'jobhistory_heapsize'];
     var siteProperties = {};
     siteObj.forEach(function (_siteObj) {
-      if (_siteObj.isRequiredByAgent !== false) {
-        if (/_heapsize|_newsize|_maxnewsize$/.test(_siteObj.name) && 
!heapsizeException.contains(_siteObj.name)) {
-          Em.set(_siteObj, "value",  _siteObj.value + "m");
-        }
-        siteProperties[_siteObj.name] = 
App.config.escapeXMLCharacters(_siteObj.value);
+      if (_siteObj.isRequiredByAgent == false) return;
+      if (/_heapsize|_newsize|_maxnewsize$/.test(_siteObj.name) && 
!heapsizeException.contains(_siteObj.name)) {
+        Em.set(_siteObj, "value",  _siteObj.value + "m");
       }
+      siteProperties[_siteObj.name] = 
App.config.escapeXMLCharacters(_siteObj.value);
       switch (siteName) {
         case 'falcon-startup.properties':
         case 'falcon-runtime.properties':

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a2307c6/ambari-web/app/controllers/wizard.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard.js 
b/ambari-web/app/controllers/wizard.js
index a0ac6e5..e2ba26d 100644
--- a/ambari-web/app/controllers/wizard.js
+++ b/ambari-web/app/controllers/wizard.js
@@ -817,7 +817,7 @@ App.WizardController = 
Em.Controller.extend(App.LocalStorage, {
    */
   saveServiceConfigProperties: function (stepController) {
     var serviceConfigProperties = [];
-    var updateServiceConfigProperties = [];
+    var fileNamesToUpdate = [];
     stepController.get('stepConfigs').forEach(function (_content) {
 
       if (_content.serviceName === 'YARN' && 
!App.supports.capacitySchedulerUi) {
@@ -837,6 +837,7 @@ App.WizardController = 
Em.Controller.extend(App.LocalStorage, {
           filename: _configProperties.get('filename'),
           displayType: _configProperties.get('displayType'),
           isRequiredByAgent: _configProperties.get('isRequiredByAgent'),
+          hasInitialValue: !!_configProperties.get('hasInitialValue'),
           isRequired: _configProperties.get('isRequired') // flag that allow 
saving property with empty value
         };
         serviceConfigProperties.push(configProperty);
@@ -846,23 +847,23 @@ App.WizardController = 
Em.Controller.extend(App.LocalStorage, {
         // get only modified configs
         var configs = 
_content.get('configs').filterProperty('isNotDefaultValue').filter(function 
(config) {
           var notAllowed = ['masterHost', 'masterHosts', 'slaveHosts', 
'slaveHost'];
-          return !notAllowed.contains(config.get('displayType'));
+          return !notAllowed.contains(config.get('displayType')) && 
!!config.filename;
         });
         // if modified configs detected push all service's configs for update
-        if (configs.length)
-          updateServiceConfigProperties = 
updateServiceConfigProperties.concat(serviceConfigProperties.filterProperty('serviceName',
 _content.get('serviceName')));
+        if (configs.length) {
+          fileNamesToUpdate = 
fileNamesToUpdate.concat(configs.mapProperty('filename').uniq());
+        }
         // watch for properties that are not modified but have to be updated
         if (_content.get('configs').someProperty('forceUpdate')) {
           // check for already added modified properties
-          if (!updateServiceConfigProperties.findProperty('serviceName', 
_content.get('serviceName'))) {
-            updateServiceConfigProperties = 
updateServiceConfigProperties.concat(serviceConfigProperties.filterProperty('serviceName',
 _content.get('serviceName')));
-          }
+          var forceUpdatedFileNames = configs.filterProperty('forceUpdate', 
true).mapProperty('filename').uniq();
+          fileNamesToUpdate = 
fileNamesToUpdate.concat(forceUpdatedFileNames).uniq();
         }
       }
     }, this);
     this.setDBProperty('serviceConfigProperties', serviceConfigProperties);
     this.set('content.serviceConfigProperties', serviceConfigProperties);
-    this.setDBProperty('configsToUpdate', updateServiceConfigProperties);
+    this.setDBProperty('fileNamesToUpdate', fileNamesToUpdate);
   },
   /**
    * save Config groups
@@ -1021,4 +1022,4 @@ App.WizardController = 
Em.Controller.extend(App.LocalStorage, {
   getCluster: function () {
     return jQuery.extend({}, this.get('clusterStatusTemplate'), {name: 
App.router.getClusterName()});
   }
-});
\ No newline at end of file
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a2307c6/ambari-web/app/controllers/wizard/step7_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js 
b/ambari-web/app/controllers/wizard/step7_controller.js
index 5911f1b..41ea574 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -648,7 +648,7 @@ App.WizardStep7Controller = Em.Controller.extend({
     }
     this.clearStep();
     App.config.setPreDefinedServiceConfigs();
-
+    var self = this;
     //STEP 1: Load advanced configs
     var advancedConfigs = this.get('content.advancedServiceConfig');
     //STEP 2: Load on-site configs by service from local DB
@@ -671,14 +671,21 @@ App.WizardStep7Controller = Em.Controller.extend({
     this.set('groupsToDelete', 
this.get('wizardController').getDBProperty('groupsToDelete') || []);
 
     if (this.get('wizardController.name') === 'addServiceController') {
-      this.setInstalledServiceConfigs(this.get('serviceConfigTags'), configs);
+      
App.router.get('configurationController').getConfigsByTags(this.get('serviceConfigTags')).done(function
 (loadedConfigs) {
+        self.setInstalledServiceConfigs(self.get('serviceConfigTags'), 
configs, loadedConfigs);
+        self.applyServicesConfigs(configs, storedConfigs);
+      });
+    } else {
+      this.applyServicesConfigs(configs, storedConfigs);
     }
+  },
+
+  applyServicesConfigs: function (configs, storedConfigs) {
     if (this.get('allSelectedServiceNames').contains('STORM') || 
this.get('installedServiceNames').contains('STORM')) {
       this.resolveServiceDependencyConfigs('STORM', configs);
     }
     //STEP 6: Distribute configs by service and wrap each one in 
App.ServiceConfigProperty (configs -> serviceConfigs)
     this.setStepConfigs(configs, storedConfigs);
-
     this.checkHostOverrideInstaller();
     this.activateSpecialConfigs();
     this.selectProperService();
@@ -686,7 +693,6 @@ App.WizardStep7Controller = Em.Controller.extend({
       App.router.send('next');
     }
   },
-
   /**
    * If <code>App.supports.hostOverridesInstaller</code> is enabled should 
load config groups
    * and (if some services are already installed) load config groups for 
installed services
@@ -802,51 +808,49 @@ App.WizardStep7Controller = Em.Controller.extend({
    * @param configs
    * @method setInstalledServiceConfigs
    */
-  setInstalledServiceConfigs: function (serviceConfigTags, configs) {
+  setInstalledServiceConfigs: function (serviceConfigTags, configs, 
configsByTags) {
     var configsMap = {};
     var configTypeMap = {};
     var configMixin = App.get('config');
     var self = this;
 
-    
App.router.get('configurationController').getConfigsByTags(serviceConfigTags).done(function
 (configsByTags) {
-      configsByTags.forEach(function (configSite) {
-        $.extend(configsMap, configSite.properties);
-        for (var name in configSite.properties) {
-          configTypeMap[name] = configSite.type;
-        }
-      });
-      configs.forEach(function (_config) {
-        if (!Em.isNone(configsMap[_config.name])) {
-          // prevent overriding already edited properties
-          if (_config.defaultValue != configsMap[_config.name])
-            _config.value = configsMap[_config.name];
-          _config.defaultValue = configsMap[_config.name];
-          _config.hasInitialValue = true;
-          App.config.handleSpecialProperties(_config);
-          delete configsMap[_config.name];
-        }
-      });
-
-      self.setServiceDatabaseConfigs(configs);
-      //add user properties
-      for (var name in configsMap) {
-        configs.push(configMixin.addUserProperty({
-          id: 'site property',
-          name: name,
-          serviceName: 
configMixin.getServiceNameByConfigType(configTypeMap[name]),
-          value: configsMap[name],
-          defaultValue: configsMap[name],
-          filename: 
(configMixin.get('filenameExceptions').contains(configTypeMap[name])) ? 
configTypeMap[name] : configTypeMap[name] + '.xml',
-          category: 'Advanced',
-          isUserProperty: true,
-          isOverridable: true,
-          overrides: [],
-          isRequired: true,
-          isVisible: true,
-          showLabel: true
-        }, false, []));
+    configsByTags.forEach(function (configSite) {
+      $.extend(configsMap, configSite.properties);
+      for (var name in configSite.properties) {
+        configTypeMap[name] = configSite.type;
+      }
+    });
+    configs.forEach(function (_config) {
+      if (!Em.isNone(configsMap[_config.name])) {
+        // prevent overriding already edited properties
+        if (_config.defaultValue != configsMap[_config.name])
+          _config.value = configsMap[_config.name];
+        _config.defaultValue = configsMap[_config.name];
+        _config.hasInitialValue = true;
+        App.config.handleSpecialProperties(_config);
+        delete configsMap[_config.name];
       }
     });
+    self.setServiceDatabaseConfigs(configs);
+    //add user properties
+    for (var name in configsMap) {
+      configs.push(configMixin.addUserProperty({
+        id: 'site property',
+        name: name,
+        serviceName: 
configMixin.getServiceNameByConfigType(configTypeMap[name]),
+        value: configsMap[name],
+        defaultValue: configsMap[name],
+        filename: 
(configMixin.get('filenameExceptions').contains(configTypeMap[name])) ? 
configTypeMap[name] : configTypeMap[name] + '.xml',
+        category: 'Advanced',
+        hasInitialValue: true,
+        isUserProperty: true,
+        isOverridable: true,
+        overrides: [],
+        isRequired: true,
+        isVisible: true,
+        showLabel: true
+      }, false, []));
+    }
   },
   /**
    * Check if Oozie or Hive use existing database then need

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a2307c6/ambari-web/app/controllers/wizard/step8_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js 
b/ambari-web/app/controllers/wizard/step8_controller.js
index 8545c01..5dccf72 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -820,44 +820,32 @@ App.WizardStep8Controller = Em.Controller.extend({
    * Update configurations for installed services.
    * Do separated PUT-request for each siteName for each service
    *
-   * @param {Array} configsToUpdate - configs need to update
-   * Format:
-   * <code>
-   *   [
-   *    {serviceName: 's1', id: 'site property', filename: 'f1.xml', name: 
'n1', value: 'v1'},
-   *    {serviceName: 's2', id: 'site property', filename: 'f1.xml', name: 
'n2', value: 'v2'},
-   *    {serviceName: 's2', id: '', filename: 'f2.xml', name: 'n3', value: 
'v3'}
-   *   ]
-   * </code>
+   * @param {Array} fileNamesToUpdate - file names that should be updated
    * @method updateConfigurations
    */
-  updateConfigurations: function (configsToUpdate) {
+  updateConfigurations: function (fileNamesToUpdate) {
     var configurationController = 
App.router.get('mainServiceInfoConfigsController');
-    var configs = configsToUpdate.filter(function(config) {
-      return !!config.filename && !/^(core)/.test(config.filename) && 
config.filename.indexOf('env')==-1;
-    });
-    var serviceNames = configs.mapProperty('serviceName').uniq();
+    var configs = this.get('configs').slice(0);
     var configsMap = [];
 
-    serviceNames.forEach(function (serviceName) {
-      var serviceConfigs = configs.filterProperty('serviceName', serviceName);
+    fileNamesToUpdate.forEach(function(fileName){
+      if (!fileName || /^(core)/.test(fileName)) return;
       var tagName = 'version' + (new Date).getTime();
-      serviceConfigs.forEach(function(config) {
-        config.value = App.config.trimProperty(config, false);
+      var configsToSave = configs.filterProperty('filename', fileName);
+      configsToSave.forEach(function(item) {
+        item.value = App.config.trimProperty(item, false);
       });
-      serviceConfigs.mapProperty('filename').uniq().forEach(function 
(siteName) {
-        
configsMap.push(configurationController.createSiteObj(siteName.replace(".xml", 
""), tagName, serviceConfigs.filterProperty('filename', siteName)));
-      });
-    });
+      
configsMap.push(configurationController.createSiteObj(fileName.replace(".xml", 
""), tagName, configsToSave));
+    }, this);
 
     if (!configsMap.length) return;
-    var configData = configsMap.map(function (_serviceConfig) {
+    var configData = configsMap.map(function (siteConfigObject) {
       return JSON.stringify({
         Clusters: {
           desired_config: {
-            type: _serviceConfig.type,
-            tag: _serviceConfig.tag,
-            properties: _serviceConfig.properties
+            type: siteConfigObject.type,
+            tag: siteConfigObject.tag,
+            properties: siteConfigObject.properties
           }
         }
       });
@@ -987,8 +975,8 @@ App.WizardStep8Controller = Em.Controller.extend({
       this.createCluster();
       this.createSelectedServices();
       if (this.get('content.controllerName') !== 'addHostController') {
-        if (this.get('wizardController').getDBProperty('configsToUpdate') && 
this.get('wizardController').getDBProperty('configsToUpdate').length) {
-          
this.updateConfigurations(this.get('wizardController').getDBProperty('configsToUpdate'));
+        if (this.get('wizardController').getDBProperty('fileNamesToUpdate') && 
this.get('wizardController').getDBProperty('fileNamesToUpdate').length) {
+          
this.updateConfigurations(this.get('wizardController').getDBProperty('fileNamesToUpdate'));
         }
         this.createConfigurations();
         this.applyConfigurationsToCluster();
@@ -1363,6 +1351,30 @@ App.WizardStep8Controller = Em.Controller.extend({
   },
 
   /**
+   * Compare generated config object with current configs that were filled
+   * on "Customize Services" page.
+   *
+   * @param {Object} properties - generated by createSiteObj|createCoreSiteObj
+   * @param {Array} configs - current configs to compare
+   * @return {Boolean}
+   * @method isConfigsChanged
+   **/
+  isConfigsChanged: function (properties, configs) {
+    var isChanged = false;
+    for (var property in properties) {
+      var config = configs.findProperty('name', property);
+      // if config not found then it's looks like a new config
+      if (!config) {
+        isChanged = true;
+      } else {
+        if (!config.hasInitialValue || config.isNotDefaultValue) {
+          isChanged = true;
+        }
+      }
+    }
+    return isChanged;
+  },
+  /**
    * Create config objects for cluster and services
    * @method createConfigurations
    */
@@ -1380,9 +1392,9 @@ App.WizardStep8Controller = Em.Controller.extend({
     if (this.get('content.controllerName') == 'addServiceController') {
       tag = 'version' + (new Date).getTime();
       coreSiteObject.tag = tag;
-      this.get('serviceConfigTags').pushObject(coreSiteObject);
-      //for Add Service save config of new and installed services either
-      selectedServices = 
selectedServices.concat(this.get('installedServices'));
+      var coreSiteConfigs = 
this.get('configs').filterProperty('filename','core-site.xml');
+      if (this.isConfigsChanged(coreSiteObject.properties, coreSiteConfigs))
+        this.get('serviceConfigTags').pushObject(coreSiteObject);
     }
 
     var objMap = {

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a2307c6/ambari-web/app/utils/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/config.js b/ambari-web/app/utils/config.js
index 3c532ea..8402861 100644
--- a/ambari-web/app/utils/config.js
+++ b/ambari-web/app/utils/config.js
@@ -1002,6 +1002,7 @@ App.config = Em.Object.create({
       filename: stored.filename,
       category: 'Advanced',
       isUserProperty: stored.isUserProperty === true,
+      hasInitialValue: !!stored.hasInitialValue,
       isOverridable: true,
       overrides: stored.overrides,
       isRequired: true,

Reply via email to