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/branch-alerts-dev Commit: bd04a28e14171f8d64fb6b62678a0a441f444005 Parents: 127978c Author: atkach <atk...@hortonworks.com> Authored: Tue Sep 16 14:30:45 2014 +0300 Committer: atkach <atk...@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);