Selaa lähdekoodia

AMBARI-5002: Oozie log4j properties contains &apos and &quot instead of real symbols. (jaimin)

Jaimin Jetly 11 vuotta sitten
vanhempi
commit
b4eb05c6ea

+ 8 - 2
ambari-web/app/controllers/main/service/info/configs.js

@@ -1425,8 +1425,14 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
   createSiteObj: function (siteName, tagName, siteObj) {
     var siteProperties = {};
     siteObj.forEach(function (_siteObj) {
-      siteProperties[_siteObj.name] = this.setServerConfigValue(_siteObj.name, _siteObj.value);
-      //this.recordHostOverride(_siteObj, siteName, tagName, this);
+      switch(siteName) {
+        case 'falcon-startup.properties':
+        case 'falcon-runtime.properties':
+          siteProperties[_siteObj.name] = _siteObj.value;
+          break;
+        default:
+          siteProperties[_siteObj.name] = this.setServerConfigValue(_siteObj.name, _siteObj.value);
+      }
     }, this);
     return {"type": siteName, "tag": tagName, "properties": siteProperties};
   },

+ 25 - 18
ambari-web/app/controllers/wizard/step8_controller.js

@@ -1120,7 +1120,7 @@ App.WizardStep8Controller = Em.Controller.extend({
     var coreSiteObject = this.createCoreSiteObj();
     if (this.get('content.controllerName') == 'installerController') {
       this.get('serviceConfigTags').pushObject(coreSiteObject);
-      this.get('serviceConfigTags').pushObject(this.createSiteObj('hdfs-site'));
+      this.get('serviceConfigTags').pushObject(this.createSiteObj('hdfs-site',false));
       this.get('serviceConfigTags').pushObject(this.createLog4jObj('hdfs'));
     }
     var globalSiteObj = this.createGlobalSiteObj();
@@ -1132,29 +1132,29 @@ App.WizardStep8Controller = Em.Controller.extend({
     this.get('serviceConfigTags').pushObject(globalSiteObj);
 
     var objMap = {
-      MAPREDUCE: {site: ['mapred-site'], log4j: ['mapreduce']},
-      MAPREDUCE2: {site: ['mapred-site'], log4j: ['mapreduce2']},
-      YARN: {site: ['yarn-site','capacity-scheduler'], log4j: ['yarn']},
-      HBASE: {site: ['hbase-site'], log4j: ['hbase']},
-      OOZIE: {site: ['oozie-site'], log4j: ['oozie']},
-      HIVE: {site: ['hive-site'], log4j: ['hive','hive-exec']},
-      WEBHCAT: {site: ['webhcat-site'], log4j: []},
-      HUE: {site: ['hue-site'], log4j: []},
+      MAPREDUCE: {site: [{filename: 'mapred-site',isXmlFile: true}], log4j: ['mapreduce']},
+      MAPREDUCE2: {site: [{filename:'mapred-site',isXmlFile: true}], log4j: ['mapreduce2']},
+      YARN: {site: [{filename:'yarn-site',isXmlFile: true},{filename:'capacity-scheduler',isXmlFile: true}], log4j: ['yarn']},
+      HBASE: {site: [{filename:'hbase-site',isXmlFile: true}], log4j: ['hbase']},
+      OOZIE: {site: [{filename:'oozie-site',isXmlFile: true}], log4j: ['oozie']},
+      HIVE: {site: [{filename:'hive-site',isXmlFile: true}], log4j: ['hive','hive-exec']},
+      WEBHCAT: {site: [{filename:'webhcat-site',isXmlFile: true}], log4j: []},
+      HUE: {site: [{filename:'hue-site',isXmlFile: true}], log4j: []},
       PIG: {site: [], log4j: ['pig']},
-      FALCON: {site: ['falcon-startup.properties','falcon-runtime.properties'], log4j: []},
-      TEZ: {site: ['tez-site'], log4j: []},
+      FALCON: {site: [{filename:'falcon-startup.properties',isXmlFile: false},{filename:'falcon-runtime.properties',isXmlFile: false}], log4j: []},
+      TEZ: {site: [{filename:'tez-site',isXmlFile: true}], log4j: []},
       ZOOKEEPER: {site: [], log4j: ['zookeeper']}
     };
 
     if (App.supports.capacitySchedulerUi) {
-      objMap['MAPREDUCE'].site.pushObjects(['capacity-scheduler','mapred-queue-acls']);
+      objMap['MAPREDUCE'].site.pushObjects([{filename:'capacity-scheduler',isXmlFile: true},{filename:'mapred-queue-acls',isXmlFile: true}]);
     }
 
     for(var serviceName in objMap) {
       if (objMap.hasOwnProperty(serviceName)) {
         if (selectedServices.someProperty('serviceName', serviceName)) {
           objMap[serviceName].site.forEach(function(site) {
-            self.get('serviceConfigTags').pushObject(self.createSiteObj(site));
+            self.get('serviceConfigTags').pushObject(self.createSiteObj(site.filename,!site.isXmlFile));
           });
           objMap[serviceName].log4j.forEach(function(log4j) {
             self.get('serviceConfigTags').pushObject(self.createLog4jObj(log4j));
@@ -1358,13 +1358,20 @@ App.WizardStep8Controller = Em.Controller.extend({
   /**
    * Create siteObj for custom service with it own configs
    * @param {string} site
+   * @param {Boolean} isNonXmlFile
    * @returns {{type: string, tag: string, properties: {}}}
    */
-  createSiteObj: function(site) {
+  createSiteObj: function(site,isNonXmlFile) {
     var properties = {};
-    this.get('configs').filterProperty('filename', site + '.xml').forEach(function (_configProperty) {
-      properties[_configProperty.name] = App.config.escapeXMLCharacters(_configProperty.value);
-    }, this);
+    if (!!isNonXmlFile) {
+      this.get('configs').filterProperty('filename', site + '.xml').forEach(function (_configProperty) {
+        properties[_configProperty.name] = _configProperty.value;
+      },this);
+    } else {
+      this.get('configs').filterProperty('filename', site + '.xml').forEach(function (_configProperty) {
+        properties[_configProperty.name] = App.config.escapeXMLCharacters(_configProperty.value);
+      },this);
+    }
     return {"type": site, "tag": "version1", "properties": properties };
   },
 
@@ -1374,7 +1381,7 @@ App.WizardStep8Controller = Em.Controller.extend({
    * @returns {{type: string, tag: string, properties: {}}}
    */
   createLog4jObj: function (site) {
-    return this.createSiteObj(site + '-log4j');
+    return this.createSiteObj(site + '-log4j',true);
   },
 
   /**

+ 27 - 0
ambari-web/test/installer/step8_test.js

@@ -125,6 +125,7 @@ describe('App.WizardStep8Controller', function() {
       installerStep8Controller.clearStep();
     });
 
+
     // e - without global and core!
     var tests = Em.A([
       {selectedServices: Em.A(['MAPREDUCE2']),e: 2},
@@ -157,6 +158,32 @@ describe('App.WizardStep8Controller', function() {
       });
     });
 
+    // Verify xml character escaping is not done for log4j files and falcon startup-properties and runtime-properties files.
+    it('escape xml character for installer wizard', function() {
+      var services = Em.A([Em.Object.create({isSelected:true,isInstalled:false,serviceName:'OOZIE'}),
+        Em.Object.create({isSelected:true,isInstalled:false,serviceName:'FALCON'})]);
+
+      var nonXmlConfigs = [
+        {filename: 'oozie-log4j.xml', name: 'p1', value: "'.'v1"},
+        {filename: 'falcon-startup.properties.xml', name: 'p1', value: "'.'v1"} ,
+        {filename: 'falcon-startup.properties.xml', name: 'p2', value: 'v2'},
+        {filename: 'falcon-runtime.properties.xml', name: 'p1', value: "'.'v1"},
+        {filename: 'falcon-runtime.properties.xml', name: 'p2', value: 'v2'}
+      ];
+      installerStep8Controller = App.WizardStep8Controller.create({
+        content: {controllerName: 'installerController', services: services},
+        configs: nonXmlConfigs
+      });
+      installerStep8Controller.createConfigurations();
+      var nonXmlConfigTypes = ['oozie-log4j','falcon-startup.properties','falcon-runtime.properties'];
+      nonXmlConfigTypes.forEach(function(_nonXmlConfigType){
+        var nonXmlConfigTypeObj = installerStep8Controller.get('serviceConfigTags').findProperty('type',_nonXmlConfigType);
+        var nonXmlSitePropertyVal = nonXmlConfigTypeObj.properties['p1'];
+        expect(nonXmlSitePropertyVal).to.equal("'.'v1");
+      });
+      installerStep8Controller.clearStep();
+    });
+
   });
 
   describe('#createSelectedServicesData', function() {