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 2014/09/16 13:33:15 UTC

git commit: AMBARI-7328 Config versions have wrong values after switching groups. (atkach)

Repository: ambari
Updated Branches:
  refs/heads/trunk 127978c24 -> bd04a28e1


AMBARI-7328 Config versions have wrong values after switching groups. (atkach)


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

Branch: refs/heads/trunk
Commit: bd04a28e14171f8d64fb6b62678a0a441f444005
Parents: 127978c
Author: atkach <at...@hortonworks.com>
Authored: Tue Sep 16 14:30:45 2014 +0300
Committer: atkach <at...@hortonworks.com>
Committed: Tue Sep 16 14:30:45 2014 +0300

----------------------------------------------------------------------
 .../controllers/main/service/info/configs.js    | 113 +++++++++++++------
 ambari-web/app/utils/ajax/ajax.js               |   9 ++
 .../views/common/configs/config_history_flow.js |   2 +-
 3 files changed, 86 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/bd04a28e/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 2f79685..e10a0ba 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -48,8 +48,8 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
   preSelectedConfigVersion: null,
   // contain Service Config Property, when user proceed from Select Config Group dialog
   overrideToAdd: null,
-  //latest version of service config versions
-  currentVersion: null,
+  //version of default config group, configs of which currently applied
+  currentDefaultVersion: null,
   //version selected to view
   selectedVersion: null,
   // file names of changed configs
@@ -58,8 +58,8 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
   serviceConfigVersionNote: '',
   versionLoaded: false,
   isCurrentSelected: function () {
-    return this.get('selectedVersion') === this.get('currentVersion');
-  }.property('selectedVersion', 'currentVersion'),
+    return App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + this.get('selectedVersion')).get('isCurrent');
+  }.property('selectedVersion'),
   serviceConfigs: function () {
     return App.config.get('preDefinedServiceConfigs');
   }.property('App.config.preDefinedServiceConfigs'),
@@ -179,6 +179,16 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
   }.property('propertyFilters', 'isCompareMode'),
 
   /**
+   * indicate wtether service config version belongs to default config group
+   * @method isVersionDefault
+   * @param version
+   * @return {Boolean}
+   */
+  isVersionDefault: function(version) {
+    return version && version.get('groupId') == -1;
+  },
+
+  /**
    * clear and set properties to default value
    */
   clearStep: function () {
@@ -290,41 +300,45 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
 
   /**
    * load service config versions to model
-   * set currentVersion
+   * set currentDefaultVersion
    * @param data
    * @param opt
    * @param params
    */
   loadServiceConfigVersionsSuccess: function (data, opt, params) {
     App.serviceConfigVersionsMapper.map(data);
+    this.set('currentDefaultVersion', data.items.filterProperty('group_id', -1).findProperty('is_current').service_config_version);
     if (this.get('preSelectedConfigVersion')) {
-      this.set('currentVersion', this.get('preSelectedConfigVersion.version'));
+      this.loadSelectedVersion(this.get('preSelectedConfigVersion.version'));
     } else {
-      this.set('currentVersion', data.items.filterProperty('group_id', -1).findProperty('is_current').service_config_version);
+      this.loadSelectedVersion();
     }
-    this.loadSelectedVersion();
   },
 
   /**
    * get selected service config version
-   * In case selected version is undefined then take currentVersion
+   * In case selected version is undefined then take currentDefaultVersion
    * @param version
    */
   loadSelectedVersion: function (version) {
     var self = this;
     this.set('versionLoaded', false);
-    var groupName = App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + version).get('groupName');
+    version = version || this.get('currentDefaultVersion');
+    var versionRecord = App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + version);
+    //version of non-default group require properties from current version of default group to correctly display page
+    var versions = (this.isVersionDefault(versionRecord)) ? [version] : [this.get('currentDefaultVersion'), version];
 
-    if (self.get('dataIsLoaded') && !(groupName && this.get('selectedConfigGroup.name') === groupName)) {
+    //if version from default group selected then switch to default group
+    if (self.get('dataIsLoaded') && this.isVersionDefault(versionRecord)) {
       this.set('selectedConfigGroup', this.get('configGroups').findProperty('isDefault'));
     }
 
     App.ajax.send({
-      name: 'service.serviceConfigVersion.get',
+      name: 'service.serviceConfigVersions.get.multiple',
       sender: this,
       data: {
         serviceName: this.get('content.serviceName'),
-        serviceConfigVersion: version || this.get('currentVersion')
+        serviceConfigVersions: versions
       },
       success: 'loadSelectedVersionSuccess'
     }).complete(function () {
@@ -346,18 +360,36 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
     var serviceConfigsDef = this.get('serviceConfigs').findProperty('serviceName', this.get('content.serviceName'));
     var siteToTagMap = {};
     var configTypesRendered = Object.keys(serviceConfigsDef.get('configTypesRendered'));
+    var selectedVersion = params.serviceConfigVersions.length > 1 ? params.serviceConfigVersions[1] : params.serviceConfigVersions[0];
+    var configurations = [];
+
 
     configTypesRendered.forEach(function (siteName) {
-      if (data.items[0].configurations.someProperty('type', siteName)) {
-        siteToTagMap[siteName] = data.items[0].configurations.findProperty('type', siteName).tag;
-      } else {
-        siteToTagMap[siteName] = 'version1';
-      }
+      data.items.forEach(function (item) {
+        if (item.group_id == -1) {
+          configurations = item.configurations;
+          if (item.configurations.someProperty('type', siteName)) {
+            siteToTagMap[siteName] = item.configurations.findProperty('type', siteName).tag;
+          } else {
+            siteToTagMap[siteName] = 'version1';
+          }
+        } else {
+          //set config tags of non-default config group to load overrides from selected version
+          this.loadedGroupToOverrideSiteToTagMap[item.group_name] = {};
+          item.configurations.forEach(function (config) {
+            this.loadedGroupToOverrideSiteToTagMap[item.group_name][config.type] = config.tag;
+          }, this)
+        }
+      }, this)
     }, this);
 
-    App.router.get('configurationController').saveToDB(data.items[0].configurations);
+    App.router.get('configurationController').saveToDB(configurations);
     this.loadedClusterSiteToTagMap = siteToTagMap;
-    this.set('selectedVersion', params.serviceConfigVersion);
+    this.set('selectedVersion', selectedVersion);
+    //reset map if selected current version of default group
+    if (this.get('isCurrentSelected') && selectedVersion === this.get('currentDefaultVersion')) {
+      this.loadedGroupToOverrideSiteToTagMap = {};
+    }
   },
 
   /**
@@ -376,19 +408,19 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
   },
 
   loadServiceConfigsSuccess: function (data, opt, params) {
+    if (App.get('supports.configHistory')) {
+      this.setConfigGroups(data, opt, params);
+      return;
+    }
     if (data) {
       this.setConfigGroups(data, opt, params);
     } else {
-      if (!App.get('supports.configHistory')) {
-        App.ajax.send({
-          name: 'config.tags',
-          sender: this,
-          data: App.permit(params, ['clusterName', 'serviceConfigsDef', 'serviceName']),
-          success: 'setConfigGroups'
-        });
-      }  else {
-        this.setConfigGroups(data, opt, params);
-      }
+      App.ajax.send({
+        name: 'config.tags',
+        sender: this,
+        data: App.permit(params, ['clusterName', 'serviceConfigsDef', 'serviceName']),
+        success: 'setConfigGroups'
+      });
     }
   },
 
@@ -480,15 +512,20 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
     var selectedConfigGroup = this.get('selectedConfigGroup');
     var serviceName = this.get('content.serviceName');
     //STEP 1: handle tags from JSON data for host overrides
-    this.loadedGroupToOverrideSiteToTagMap = {};
+    if (!App.supports.configHistory) {
+      //if config history enabled then loadedGroupToOverrideSiteToTagMap already has content set in loadSelectedVersionSuccess()
+      this.loadedGroupToOverrideSiteToTagMap = {};
+    }
     var configGroupsWithOverrides = selectedConfigGroup.get('isDefault') && !this.get('isHostsConfigsPage') ? this.get('configGroups') : [selectedConfigGroup];
     configGroupsWithOverrides.forEach(function (item) {
       var groupName = item.get('name');
-      this.loadedGroupToOverrideSiteToTagMap[groupName] = {};
-      item.get('configSiteTags').forEach(function (siteTag) {
-        var site = siteTag.get('site');
-        this.loadedGroupToOverrideSiteToTagMap[groupName][site] = siteTag.get('tag');
-      }, this);
+      if (Em.isNone(this.loadedGroupToOverrideSiteToTagMap[groupName])) {
+        this.loadedGroupToOverrideSiteToTagMap[groupName] = {};
+        item.get('configSiteTags').forEach(function (siteTag) {
+          var site = siteTag.get('site');
+          this.loadedGroupToOverrideSiteToTagMap[groupName][site] = siteTag.get('tag');
+        }, this);
+      }
     }, this);
     //STEP 2: Create an array of objects defining tag names to be polled and new tag names to be set after submit
     this.setServiceConfigTags(this.loadedClusterSiteToTagMap);
@@ -515,7 +552,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
       //STEP load configs of version being compared against
       self.loadCompareVersionConfigs(self.get('allConfigs')).done(function (isComparison) {
         //STEP 9: Load and add overriden configs of group
-        if (!isComparison && self.get('isCurrentSelected')) {
+        if (!isComparison && (!self.get('selectedConfigGroup').get('isDefault') || self.get('isCurrentSelected'))) {
           App.config.loadServiceConfigGroupOverrides(self.get('allConfigs'), self.get('loadedGroupToOverrideSiteToTagMap'), self.get('configGroups'), self.onLoadOverrides, self);
         } else {
           self.onLoadOverrides(self.get('allConfigs'));
@@ -2560,6 +2597,8 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
         return;
       }
     }
+    //clean when switch config group
+    this.loadedGroupToOverrideSiteToTagMap = {};
     this.set('selectedConfigGroup', event.context);
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/bd04a28e/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 3d1fda9..2dceaa5 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1906,6 +1906,15 @@ var urls = {
     real: '/clusters/{clusterName}/configurations/service_config_versions?service_name={serviceName}&service_config_version={serviceConfigVersion}',
     mock: '/data/configurations/service_version.json'
   },
+  'service.serviceConfigVersions.get.multiple': {
+    real: '/clusters/{clusterName}/configurations/service_config_versions?service_name={serviceName}&service_config_version.in({serviceConfigVersions})',
+    mock: '/data/configurations/service_version.json',
+    format: function(data) {
+      return {
+        serviceConfigVersions: data.serviceConfigVersions.join(',')
+      }
+    }
+  },
   'service.serviceConfigVersion.revert': {
     'real': '/clusters/{clusterName}',
     'mock': '',

http://git-wip-us.apache.org/repos/asf/ambari/blob/bd04a28e/ambari-web/app/views/common/configs/config_history_flow.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/config_history_flow.js b/ambari-web/app/views/common/configs/config_history_flow.js
index 1fe7d23..a9c36f4 100644
--- a/ambari-web/app/views/common/configs/config_history_flow.js
+++ b/ambari-web/app/views/common/configs/config_history_flow.js
@@ -159,7 +159,7 @@ App.ConfigHistoryFlowView = Em.View.extend({
     var serviceVersions = this.get('serviceVersions');
     var startIndex = 0;
     var currentIndex = 0;
-    var selectedVersion = this.get('controller.currentVersion');
+    var selectedVersion = this.get('controller.selectedVersion');
 
     serviceVersions.setEach('isDisplayed', false);