Repository: ambari Updated Branches: refs/heads/trunk 827fb2069 -> e405be9de
AMBARI-15889 Wrong overrides after Add Service Wizard. (ababiichuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e405be9d Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e405be9d Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e405be9d Branch: refs/heads/trunk Commit: e405be9defb7603a5fbbc02b769cce2dc484f567 Parents: 827fb20 Author: ababiichuk <ababiic...@hortonworks.com> Authored: Thu Apr 14 19:27:02 2016 +0300 Committer: ababiichuk <ababiic...@hortonworks.com> Committed: Fri Apr 15 12:48:49 2016 +0300 ---------------------------------------------------------------------- .../main/service/manage_config_groups_controller.js | 2 +- .../app/controllers/wizard/step7_controller.js | 4 ++-- .../app/mappers/configs/config_groups_mapper.js | 4 ++-- .../app/mixins/common/configs/configs_saver.js | 16 +++++++++++++++- ambari-web/app/models/configs/config_group.js | 2 +- ambari-web/test/models/configs/config_group_test.js | 2 +- 6 files changed, 22 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e405be9d/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 d8bfa32..854e6c8 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 @@ -710,7 +710,7 @@ App.ManageConfigGroupsController = Em.Controller.extend(App.ConfigOverridable, { name: groupName, description: this.get('configGroupDesc'), isDefault: false, - parent_config_group_id: serviceName + '_default', + parent_config_group_id: App.ServiceConfigGroup.getParentConfigGroupId(serviceName), service_id: serviceName, service_name: serviceName, hosts: [], http://git-wip-us.apache.org/repos/asf/ambari/blob/e405be9d/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 eb44842..02a555b 100644 --- a/ambari-web/app/controllers/wizard/step7_controller.js +++ b/ambari-web/app/controllers/wizard/step7_controller.js @@ -413,7 +413,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E */ _updateIsEditableFlagForConfig: function (serviceConfigProperty, defaultGroupSelected) { if (App.isAuthorized('AMBARI.ADD_DELETE_CLUSTERS')) { - if (defaultGroupSelected && !this.get('isHostsConfigsPage') && !Em.get(serviceConfigProperty, 'group')) { + if (defaultGroupSelected && !Em.get(serviceConfigProperty, 'group')) { if (serviceConfigProperty.get('serviceName') === 'MISC') { var service = App.config.get('serviceByConfigTypeMap')[App.config.getConfigTagFromFileName(serviceConfigProperty.get('filename'))]; serviceConfigProperty.set('isEditable', service && !this.get('installedServiceNames').contains(service.get('serviceName'))); @@ -649,7 +649,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E * @returns {Object[]} existing configs + additional config parameters in hdfs-client.xml */ addHawqConfigsOnNnHa: function(configs) { - var nameService = configs.findProperty('id', 'dfs.nameservices__hdfs-site').value; + var nameService = configs.findProperty('id', App.config.configId('dfs.nameservices', 'hdfs-site')).value; var propertyNames = [ 'dfs.nameservices', 'dfs.ha.namenodes.' + nameService, http://git-wip-us.apache.org/repos/asf/ambari/blob/e405be9d/ambari-web/app/mappers/configs/config_groups_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/configs/config_groups_mapper.js b/ambari-web/app/mappers/configs/config_groups_mapper.js index 98a570b..b389c6d 100644 --- a/ambari-web/app/mappers/configs/config_groups_mapper.js +++ b/ambari-web/app/mappers/configs/config_groups_mapper.js @@ -91,7 +91,7 @@ App.configGroupsMapper = App.QuickDataMapper.create({ hostNamesForService[configGroup.service_name].splice(hostNamesForService[configGroup.service_name].indexOf(host), 1); }); configGroup = this.parseIt(configGroup, (mapFromVersions ? this.get('config2') : this.get('config'))); - configGroup.parent_config_group_id = configGroup.service_name + '_default'; + configGroup.parent_config_group_id = App.ServiceConfigGroup.getParentConfigGroupId(configGroup.service_name); configGroups.push(configGroup); } }, this); @@ -133,7 +133,7 @@ App.configGroupsMapper = App.QuickDataMapper.create({ */ generateDefaultGroup: function (serviceName, hostNames, childConfigGroups) { return { - id: serviceName + '_' + 'default', + id: App.ServiceConfigGroup.getParentConfigGroupId(serviceName), name: 'Default', service_name: serviceName, description: 'Default cluster level ' + App.format.role(serviceName, true) + ' configuration', http://git-wip-us.apache.org/repos/asf/ambari/blob/e405be9d/ambari-web/app/mixins/common/configs/configs_saver.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mixins/common/configs/configs_saver.js b/ambari-web/app/mixins/common/configs/configs_saver.js index f5dd841..1f81ef1 100644 --- a/ambari-web/app/mixins/common/configs/configs_saver.js +++ b/ambari-web/app/mixins/common/configs/configs_saver.js @@ -365,6 +365,16 @@ App.ConfigsSaverMixin = Em.Mixin.create({ /*********************************** 3. GENERATING JSON TO SAVE *****************************/ /** + * Map that contains last used timestamp per filename. + * There is a case when two config groups can update same filename almost simultaneously + * so they have equal timestamp only and this causes collision. So to prevent this we need to check + * if specific filename with specific timestamp is not saved yet + * + * @type {Object} + */ + _timeStamps: {}, + + /** * generating common JSON object for desired configs * @param configsToSave * @param fileNamesToSave @@ -377,8 +387,12 @@ App.ConfigsSaverMixin = Em.Mixin.create({ if (Em.isArray(configsToSave) && Em.isArray(fileNamesToSave) && fileNamesToSave.length && configsToSave.length) { serviceConfigNote = serviceConfigNote || ""; var tagVersion = "version" + (new Date).getTime(); - fileNamesToSave.forEach(function(fName) { + + /** @see <code>_timeStamps<code> **/ + if (this.get('_timeStamps')[fName] === tagVersion) tagVersion++; + this.get('_timeStamps')[fName] = tagVersion; + if (this.allowSaveSite(fName)) { var properties = configsToSave.filterProperty('filename', fName); var type = App.config.getConfigTagFromFileName(fName); http://git-wip-us.apache.org/repos/asf/ambari/blob/e405be9d/ambari-web/app/models/configs/config_group.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/configs/config_group.js b/ambari-web/app/models/configs/config_group.js index a2a64d3..44e20d5 100644 --- a/ambari-web/app/models/configs/config_group.js +++ b/ambari-web/app/models/configs/config_group.js @@ -151,7 +151,7 @@ App.ServiceConfigGroup = DS.Model.extend({ App.ServiceConfigGroup.FIXTURES = []; App.ServiceConfigGroup.getParentConfigGroupId = function(serviceName) { - return App.ServiceConfigGroup.groupId(serviceName, 'Default'); + return App.ServiceConfigGroup.groupId(serviceName, 'default'); }; App.ServiceConfigGroup.groupId = function(serviceName, groupName) { http://git-wip-us.apache.org/repos/asf/ambari/blob/e405be9d/ambari-web/test/models/configs/config_group_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/models/configs/config_group_test.js b/ambari-web/test/models/configs/config_group_test.js index 1d254c3..b9bc56b 100644 --- a/ambari-web/test/models/configs/config_group_test.js +++ b/ambari-web/test/models/configs/config_group_test.js @@ -133,7 +133,7 @@ describe('App.ServiceConfigGroup', function () { it("App.ServiceConfigGroup.groupId should be called", function () { App.ServiceConfigGroup.getParentConfigGroupId('S1'); - expect(App.ServiceConfigGroup.groupId.calledWith('S1', 'Default')).to.be.true; + expect(App.ServiceConfigGroup.groupId.calledWith('S1', 'default')).to.be.true; }); });