You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2013/11/18 19:50:23 UTC

git commit: AMBARI-3796 Config-groups configs should be saved efficiently. (atkach)

Updated Branches:
  refs/heads/trunk 346a50c35 -> d01e0e26a


AMBARI-3796 Config-groups configs should be saved efficiently. (atkach)


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

Branch: refs/heads/trunk
Commit: d01e0e26a4229ac97f8b254b4e9a0c597b7ef956
Parents: 346a50c
Author: atkach <an...@gmail.com>
Authored: Mon Nov 18 20:47:21 2013 +0200
Committer: atkach <an...@gmail.com>
Committed: Mon Nov 18 20:47:21 2013 +0200

----------------------------------------------------------------------
 ambari-web/app/config.js                        |  2 +-
 .../controllers/main/service/info/configs.js    | 91 ++++++++++++++++----
 .../service/manage_config_groups_controller.js  |  2 +-
 ambari-web/app/utils/ajax.js                    |  3 +-
 4 files changed, 79 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/d01e0e26/ambari-web/app/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/config.js b/ambari-web/app/config.js
index 52a0080..b9f869d 100644
--- a/ambari-web/app/config.js
+++ b/ambari-web/app/config.js
@@ -44,7 +44,7 @@ App.enableExperimental = false;
 
 App.supports = {
   addServices: false,
-  hostOverrides: true,
+  hostOverrides: false,
   mirroring: false,
   secureCluster: true,
   secureClusterProceedPopup: false,

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/d01e0e26/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 105f21d..55b3467 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -873,19 +873,40 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
       message: null,
       value: null
     };
-    this.savedHostToOverrideSiteToTagMap = {};
+    var selectedConfigGroup = this.get('selectedConfigGroup');
     var configs = this.get('stepConfigs').findProperty('serviceName', this.get('content.serviceName')).get('configs');
-    this.saveGlobalConfigs(configs);
-    if (this.get('content.serviceName') === 'YARN' && !App.supports.capacitySchedulerUi) {
-      configs = App.config.textareaIntoFileConfigs(configs, 'capacity-scheduler.xml');
-    }
-    this.saveSiteConfigs(configs);
 
-    /**
-     * First we put cluster configurations, which automatically creates /configurations
-     * resources. Next we update host level overrides.
-     */
-    result.flag = this.doPUTClusterConfigurations();
+    if (selectedConfigGroup.get('isDefault')) {
+      this.saveGlobalConfigs(configs);
+      if (this.get('content.serviceName') === 'YARN' && !App.supports.capacitySchedulerUi) {
+        configs = App.config.textareaIntoFileConfigs(configs, 'capacity-scheduler.xml');
+      }
+      this.saveSiteConfigs(configs);
+
+      /**
+       * First we put cluster configurations, which automatically creates /configurations
+       * resources. Next we update host level overrides.
+       */
+      result.flag = this.doPUTClusterConfigurations();
+    } else {
+      var overridenConfigs = [];
+      configs.filterProperty('isOverridden', true).forEach(function (config) {
+        overridenConfigs = overridenConfigs.concat(config.get('overrides'));
+      });
+
+      this.putConfigGroupChanges({
+        ConfigGroup: {
+          "id": selectedConfigGroup.get('id'),
+          "cluster_name": App.get('clusterName'),
+          "group_name": selectedConfigGroup.get('name'),
+          "tag": selectedConfigGroup.get('service.id'),
+          "description": selectedConfigGroup.get('description'),
+          "hosts": selectedConfigGroup.get('hosts'),
+          "desired_configs": this.buildGroupDesiredConfigs(overridenConfigs)
+        }
+      });
+      result.flag = this.get('isPutConfigGroupChangesSuccess');
+    }
     if (!result.flag) {
       result.message = Em.I18n.t('services.service.config.failSaveConfig');
     } else {
@@ -896,7 +917,45 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
     console.log("The result from applyCreatdConfToService is: " + result);
     return result;
   },
-
+  /**
+   * construct desired_configs for config groups from overriden properties
+   * @param configs
+   * @return {Array}
+   */
+  buildGroupDesiredConfigs: function (configs) {
+    var sites = [];
+    var time = (new Date).getTime();
+    configs.forEach(function (config) {
+      var type = config.get('filename').replace('.xml', '');
+      var site = sites.findProperty('type', type) || {
+        type: type,
+        tag: 'version' + time,
+        properties: {}
+      };
+      site.properties[config.get('name')] = config.get('value');
+      sites.push(site);
+    });
+    return sites;
+  },
+  /**
+   * persist properties of config groups to server
+   * @param data
+   */
+  putConfigGroupChanges: function (data) {
+    App.ajax.send({
+      name: 'config_groups.update_config_group',
+      sender: this,
+      data: {
+        id: data.ConfigGroup.id,
+        configGroup: data
+      },
+      success: "putConfigGroupChangesSuccess"
+    });
+  },
+  isPutConfigGroupChangesSuccess: false,
+  putConfigGroupChangesSuccess: function () {
+    this.set('isPutConfigGroupChangesSuccess', true);
+  },
   /**
    * save new or change exist configs in global configs
    * @param configs
@@ -904,7 +963,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
   saveGlobalConfigs: function (configs) {
     var globalConfigs = this.get('globalConfigs');
     configs.filterProperty('id', 'puppet var').forEach(function (uiConfigProperty) {
-      uiConfigProperty.set('value', App.config.trimProperty(uiConfigProperty), true);
+      uiConfigProperty.set('value', App.config.trimProperty(uiConfigProperty));
       if (globalConfigs.someProperty('name', uiConfigProperty.name)) {
         var modelGlobalConfig = globalConfigs.findProperty('name', uiConfigProperty.name);
         modelGlobalConfig.value = uiConfigProperty.value;
@@ -1397,7 +1456,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
           _globalSiteObj.value += "m";
         }
         globalSiteProperties[_globalSiteObj.name] = App.config.escapeXMLCharacters(_globalSiteObj.value);
-        this.recordHostOverride(_globalSiteObj, 'global', tagName, this);
+        //this.recordHostOverride(_globalSiteObj, 'global', tagName, this);
         //console.log("TRACE: name of the global property is: " + _globalSiteObj.name);
         //console.log("TRACE: value of the global property is: " + _globalSiteObj.value);
       }
@@ -1461,7 +1520,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
     var coreSiteProperties = {};
     coreSiteObj.forEach(function (_coreSiteObj) {
       coreSiteProperties[_coreSiteObj.name] = App.config.escapeXMLCharacters(_coreSiteObj.value);
-      this.recordHostOverride(_coreSiteObj, 'core-site', tagName, this);
+      //this.recordHostOverride(_coreSiteObj, 'core-site', tagName, this);
     }, this);
     return {"type": "core-site", "tag": tagName, "properties": coreSiteProperties};
   },
@@ -1477,7 +1536,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
     var siteProperties = {};
     siteObj.forEach(function (_siteObj) {
       siteProperties[_siteObj.name] = App.config.escapeXMLCharacters(_siteObj.value);
-      this.recordHostOverride(_siteObj, siteName, tagName, this);
+      //this.recordHostOverride(_siteObj, siteName, tagName, this);
     }, this);
     return {"type": siteName, "tag": tagName, "properties": siteProperties};
   },

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/d01e0e26/ambari-web/app/controllers/main/service/manage_config_groups_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/manage_config_groups_controller.js b/ambari-web/app/controllers/main/service/manage_config_groups_controller.js
index 90164f0..01284fb 100644
--- a/ambari-web/app/controllers/main/service/manage_config_groups_controller.js
+++ b/ambari-web/app/controllers/main/service/manage_config_groups_controller.js
@@ -197,7 +197,7 @@ App.ManageConfigGroupsController = Em.Controller.extend({
         name: 'config_groups.delete_config_group',
         sender: this,
         data: {
-          configGroupName: selectedConfigGroup.get('name')
+          id: selectedConfigGroup.get('id')
         }
       });
       this.get('configGroups').removeObject(selectedConfigGroup);

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/d01e0e26/ambari-web/app/utils/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax.js b/ambari-web/app/utils/ajax.js
index 9226d4e..06413f5 100644
--- a/ambari-web/app/utils/ajax.js
+++ b/ambari-web/app/utils/ajax.js
@@ -225,6 +225,7 @@ var urls = {
     'type': 'PUT',
     'format': function (data) {
       return {
+        async: false,
         data: JSON.stringify(
           [
             data.configGroup
@@ -234,7 +235,7 @@ var urls = {
     }
   },
   'config_groups.delete_config_group': {
-    'real': '/clusters/{clusterName}/config_groups/{configGroupName}',
+    'real': '/clusters/{clusterName}/config_groups/{id}',
     'mock': '',
     'type': 'DELETE'
   },