Prechádzať zdrojové kódy

AMBARI-15889 Wrong overrides after Add Service Wizard. (ababiichuk)

ababiichuk 9 rokov pred
rodič
commit
e405be9def

+ 1 - 1
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: [],

+ 2 - 2
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,

+ 2 - 2
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',

+ 15 - 1
ambari-web/app/mixins/common/configs/configs_saver.js

@@ -364,6 +364,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
@@ -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);

+ 1 - 1
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) {

+ 1 - 1
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;
     });
   });