AMBARI-6946 Integration of ability to save configs in batch. (atkach)

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

Branch: refs/heads/branch-alerts-dev
Commit: 490903a12816e1c6cd6bd085d8e736f4915ed797
Parents: 85d181d
Author: atkach <atk...@hortonworks.com>
Authored: Wed Aug 20 18:44:59 2014 +0300
Committer: atkach <atk...@hortonworks.com>
Committed: Wed Aug 20 18:44:59 2014 +0300

----------------------------------------------------------------------
 .../controllers/main/service/info/configs.js    | 95 +++++++++++---------
 1 file changed, 53 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/490903a1/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 a1b3677..c10a4fa 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -42,7 +42,6 @@ App.MainServiceInfoConfigsController = 
Em.Controller.extend(App.ServerValidatorM
   customConfig: [],
   isApplyingChanges: false,
   saveConfigsFlag: true,
-  putClusterConfigsCallsNumber: null,
   compareServiceVersion: null,
   // contain Service Config Property, when user proceed from Select Config 
Group dialog
   overrideToAdd: null,
@@ -1738,19 +1737,20 @@ App.MainServiceInfoConfigsController = 
Em.Controller.extend(App.ServerValidatorM
     var serviceConfigTags = this.get('serviceConfigTags');
     this.setNewTagNames(serviceConfigTags);
     var siteNameToServerDataMap = {};
-    this.set('putClusterConfigsCallsNumber', serviceConfigTags.length);
+    var configsToSave = [];
     serviceConfigTags.forEach(function (_serviceTags) {
       var configs = this.createConfigObject(_serviceTags.siteName, 
_serviceTags.newTagName);
       if (configs) {
-        this.doPUTClusterConfiguration(_serviceTags.siteName, configs);
+        configsToSave.push(configs);
         siteNameToServerDataMap[_serviceTags.siteName] = configs;
-      } else {
-        if (this.decrementProperty('putClusterConfigsCallsNumber') === 0) {
-          this.onDoPUTClusterConfigurations();
-        }
       }
     }, this);
-
+    configsToSave = this.filterChangedConfiguration(configsToSave);
+    if (configsToSave.length > 0) {
+      this.doPUTClusterConfigurationSites(configsToSave);
+    } else {
+      this.onDoPUTClusterConfigurations();
+    }
     this.set("savedSiteNameToServerServiceConfigDataMap", 
siteNameToServerDataMap);
   },
 
@@ -1763,7 +1763,7 @@ App.MainServiceInfoConfigsController = 
Em.Controller.extend(App.ServerValidatorM
    */
   createConfigObject: function (siteName, tagName) {
     console.log("TRACE: Inside " + siteName);
-    var configObject;
+    var configObject = {};
     switch (siteName) {
       case 'core-site':
         if (this.get('content.serviceName') === 'HDFS' || 
this.get('content.serviceName') === 'GLUSTERFS') {
@@ -1785,28 +1785,27 @@ App.MainServiceInfoConfigsController = 
Em.Controller.extend(App.ServerValidatorM
   },
 
   /**
-   * load existen properties and compare them with current if there are
-   * differences - trigger doPUTClusterConfigurationSite to save new properties
-   * @param {String} siteName
-   * @param {Object} newConfig
-   * @method doPUTClusterConfiguration
-   */
-  doPUTClusterConfiguration: function (siteName, newConfig) {
-    var oldConfig = 
App.router.get('configurationController').getConfigsByTags([
-      {siteName: siteName, tagName: this.loadedClusterSiteToTagMap[siteName]}
-    ]);
-    oldConfig = oldConfig[0] || {};
-    var oldProperties = oldConfig.properties || {};
-    var oldAttributes = oldConfig["properties_attributes"] || {};
-    var newProperties = newConfig.properties || {};
-    var newAttributes = newConfig["properties_attributes"] || {};
-    if (this.isAttributesChanged(oldAttributes, newAttributes) || 
this.isConfigChanged(oldProperties, newProperties)) {
-      this.doPUTClusterConfigurationSite(newConfig);
-    } else {
-      if (this.decrementProperty('putClusterConfigsCallsNumber') === 0) {
-        this.onDoPUTClusterConfigurations();
+   * filter out unchanged configurations
+   * @param {Array} configsToSave
+   * @method filterChangedConfiguration
+   */
+  filterChangedConfiguration: function (configsToSave) {
+    var changedConfigs = [];
+
+    configsToSave.forEach(function (configSite) {
+      var oldConfig = 
App.router.get('configurationController').getConfigsByTags([
+        {siteName: configSite.type, tagName: 
this.loadedClusterSiteToTagMap[configSite.type]}
+      ]);
+      oldConfig = oldConfig[0] || {};
+      var oldProperties = oldConfig.properties || {};
+      var oldAttributes = oldConfig["properties_attributes"] || {};
+      var newProperties = configSite.properties || {};
+      var newAttributes = configSite["properties_attributes"] || {};
+      if (this.isAttributesChanged(oldAttributes, newAttributes) || 
this.isConfigChanged(oldProperties, newProperties)) {
+        changedConfigs.push(configSite);
       }
-    }
+    }, this);
+    return changedConfigs;
   },
 
   /**
@@ -1895,21 +1894,35 @@ App.MainServiceInfoConfigsController = 
Em.Controller.extend(App.ServerValidatorM
   },
 
   /**
-   * Saves configuration of a particular site. The provided data
+   * prepare configuration data to save
+   * @param sites
+   * @return {Array}
+   */
+  prepareConfigurationDataToSave: function (sites) {
+    var data = [];
+
+    sites.forEach(function (configs) {
+      data.push({
+        Clusters: {
+          desired_config: configs
+        }
+      })
+    });
+    return data;
+  },
+
+  /**
+   * Saves configuration of set of sites. The provided data
    * contains the site name and tag to be used.
-   * @param {Object} data
-   * @method doPUTClusterConfigurationSite
+   * @param {Object} sites
+   * @method doPUTClusterConfigurationSites
    */
-  doPUTClusterConfigurationSite: function (data) {
+  doPUTClusterConfigurationSites: function (sites) {
     App.ajax.send({
       name: 'config.cluster_configuration.put',
       sender: this,
       data: {
-        data: JSON.stringify({
-          Clusters: {
-            desired_config: data
-          }
-        }),
+        data: JSON.stringify(this.prepareConfigurationDataToSave(sites)),
         cluster: App.router.getClusterName()
       },
       success: 'doPUTClusterConfigurationSiteSuccessCallback',
@@ -1925,9 +1938,7 @@ App.MainServiceInfoConfigsController = 
Em.Controller.extend(App.ServerValidatorM
   },
 
   doPUTClusterConfigurationSiteSuccessCallback: function () {
-    if (this.decrementProperty('putClusterConfigsCallsNumber') === 0) {
-      this.onDoPUTClusterConfigurations();
-    }
+    this.onDoPUTClusterConfigurations();
   },
 
   doPUTClusterConfigurationSiteErrorCallback: function () {

Reply via email to