Repository: ambari
Updated Branches:
  refs/heads/trunk 83ea508b6 -> 746e90d1d


AMBARI-14392. Move logic to ambari-web, for adding parameters to 
hdfs-client.xml for HAWQ when HAWQ is installed on NN HA cluster (mithmatt via 
odiachenko).


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

Branch: refs/heads/trunk
Commit: 746e90d1de23060d3d7f33f3995714a0950938b4
Parents: 83ea508
Author: Oleksandr Diachenko <[email protected]>
Authored: Wed Dec 30 11:27:14 2015 -0800
Committer: Oleksandr Diachenko <[email protected]>
Committed: Wed Dec 30 11:27:14 2015 -0800

----------------------------------------------------------------------
 .../HAWQ/2.0.0/package/scripts/common.py        | 17 +----
 .../app/controllers/wizard/step7_controller.js  | 42 ++++++++++++
 .../test/controllers/wizard/step7_test.js       | 71 ++++++++++++++++++++
 3 files changed, 114 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/746e90d1/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/package/scripts/common.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/package/scripts/common.py
 
b/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/package/scripts/common.py
index 49e86b6..c427c83 100644
--- 
a/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/package/scripts/common.py
+++ 
b/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/package/scripts/common.py
@@ -91,22 +91,7 @@ def __update_hdfs_client():
   import params
 
   hdfs_client_dict = params.hdfs_client.copy()
-  dfs_nameservice = params.hdfs_site.get('dfs.nameservices')
-
-  # Adds additional parameters required for HDFS HA, if HDFS HA is enabled
-  # Temporary logic, this logic will be moved to ambari-web to expose these 
parameters on UI once HDFS HA is enabled
-  if dfs_nameservice:
-    ha_namenodes = 'dfs.ha.namenodes.{0}'.format(dfs_nameservice)
-    ha_nn_list = [ha_nn.strip() for ha_nn in 
params.hdfs_site[ha_namenodes].split(',')]
-    required_keys = ('dfs.nameservices', ha_namenodes,
-                     
'dfs.namenode.rpc-address.{0}.{1}'.format(dfs_nameservice, ha_nn_list[0]),
-                     
'dfs.namenode.http-address.{0}.{1}'.format(dfs_nameservice, ha_nn_list[0]),
-                     
'dfs.namenode.rpc-address.{0}.{1}'.format(dfs_nameservice, ha_nn_list[1]),
-                     
'dfs.namenode.http-address.{0}.{1}'.format(dfs_nameservice, ha_nn_list[1]))
-
-    for key in required_keys:
-      hdfs_client_dict[key] = params.hdfs_site[key]
-
+  
   # security
   if params.security_enabled:
     hdfs_client_dict["hadoop.security.authentication"] = "kerberos"

http://git-wip-us.apache.org/repos/asf/ambari/blob/746e90d1/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 823d663..d10f348 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -688,6 +688,10 @@ App.WizardStep7Controller = 
Em.Controller.extend(App.ServerValidatorMixin, App.E
     if (this.get('allSelectedServiceNames').contains('YARN')) {
       configs = App.config.fileConfigsIntoTextarea(configs, 
'capacity-scheduler.xml', []);
     }
+    // if HA is enabled and HAWQ is selected to be installed -> Add HAWQ 
related configs
+    if (this.get('wizardController.name') === 'addServiceController' && 
App.get('isHaEnabled') && this.get('allSelectedServiceNames').contains('HAWQ')) 
{
+      this.addHawqConfigsOnNnHa(configs);
+    }
     if (App.get('isKerberosEnabled') && this.get('wizardController.name') == 
'addServiceController') {
       this.addKerberosDescriptorConfigs(configs, 
this.get('wizardController.kerberosDescriptorConfigs') || []);
     }
@@ -794,6 +798,44 @@ App.WizardStep7Controller = 
Em.Controller.extend(App.ServerValidatorMixin, App.E
   },
 
   /**
+   * For Namenode HA, HAWQ service requires additional config parameters in 
hdfs-client.xml
+   * This method ensures that these additional parameters are added to 
hdfs-client.xml
+   * @param configs existing configs on cluster
+   * @returns {Object[]} existing configs + additional config parameters in 
hdfs-client.xml
+   * @private
+   */
+  addHawqConfigsOnNnHa: function(configs) {
+    var nameService = configs.findProperty('id', 
'dfs.nameservices__hdfs-site').value;
+    var propertyNames = [
+      'dfs.nameservices',
+      'dfs.ha.namenodes.' + nameService,
+      'dfs.namenode.rpc-address.'+ nameService +'.nn1',
+      'dfs.namenode.rpc-address.'+ nameService +'.nn2',
+      'dfs.namenode.http-address.'+ nameService +'.nn1',
+      'dfs.namenode.http-address.'+ nameService +'.nn2'
+    ];
+
+    propertyNames.forEach(function(propertyName, propertyIndex) {
+      var propertyFromHdfs = configs.findProperty('id', propertyName + 
'__hdfs-site');
+      var newProperty = App.config.createDefaultConfig(propertyName, 'HAWQ', 
'hdfs-client.xml', true);
+      Em.setProperties(newProperty, {
+        description: propertyFromHdfs.description,
+        displayName: propertyFromHdfs.displayName,
+        displayType: 'string',
+        index: propertyIndex,
+        isOverridable: false,
+        isReconfigurable: false,
+        name: propertyFromHdfs.name,
+        value: propertyFromHdfs.value,
+        recommendedValue: propertyFromHdfs.recommendedValue
+      });
+
+      configs.push(App.ServiceConfigProperty.create(newProperty));
+    });
+    return configs;
+  },
+
+  /**
    * render configs, distribute them by service
    * and wrap each in ServiceConfigProperty object
    * @param stepConfigs

http://git-wip-us.apache.org/repos/asf/ambari/blob/746e90d1/ambari-web/test/controllers/wizard/step7_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step7_test.js 
b/ambari-web/test/controllers/wizard/step7_test.js
index 3c23c54..ac7b3c3 100644
--- a/ambari-web/test/controllers/wizard/step7_test.js
+++ b/ambari-web/test/controllers/wizard/step7_test.js
@@ -1608,6 +1608,77 @@ describe('App.InstallerStep7Controller', function () {
     });
   });
 
+  describe('#addHawqConfigsOnNnHa', function () {
+    var configs = [
+      {
+        id: 'dfs.nameservices__hdfs-site',
+        description: 'dfs.nameservices__hdfs-site',
+        displayName: 'dfs.nameservices',
+        displayType: 'string',
+        name: 'dfs.nameservices',
+        value: 'haservice',
+        recommendedValue: 'haservice'
+      },
+      {
+        id: 'dfs.ha.namenodes.haservice__hdfs-site',
+        description: 'dfs.ha.namenodes.haservice__hdfs-site',
+        displayName: 'dfs.ha.namenodes.haservice',
+        displayType: 'string',
+        name: 'dfs.ha.namenodes.haservice',
+        value: 'nn1,nn2',
+        recommendedValue: 'nn1,nn2'
+      },
+      {
+        id: 'dfs.namenode.rpc-address.haservice.nn1__hdfs-site',
+        description: 'dfs.namenode.rpc-address.haservice.nn1__hdfs-site',
+        displayName: 'dfs.namenode.rpc-address.haservice.nn1',
+        displayType: 'string',
+        name: 'dfs.namenode.rpc-address.haservice.nn1',
+        value: 'c6401.ambari.apache.org:8020',
+        recommendedValue: 'c6401.ambari.apache.org:8020'
+      },
+      {
+        id: 'dfs.namenode.rpc-address.haservice.nn2__hdfs-site',
+        description: 'dfs.namenode.rpc-address.haservice.nn2__hdfs-site',
+        displayName: 'dfs.namenode.rpc-address.haservice.nn2',
+        displayType: 'string',
+        name: 'dfs.namenode.rpc-address.haservice.nn2',
+        value: 'c6402.ambari.apache.org:8020',
+        recommendedValue: 'c6402.ambari.apache.org:8020'
+      },
+      {
+        id: 'dfs.namenode.http-address.haservice.nn1__hdfs-site',
+        description: 'dfs.namenode.http-address.haservice.nn1__hdfs-site',
+        displayName: 'dfs.namenode.http-address.haservice.nn1',
+        displayType: 'string',
+        name: 'dfs.namenode.http-address.haservice.nn1',
+        value: 'c6401.ambari.apache.org:50070',
+        recommendedValue: 'c6401.ambari.apache.org:50070'
+      },
+      {
+        id: 'dfs.namenode.http-address.haservice.nn2__hdfs-site',
+        description: 'dfs.namenode.http-address.haservice.nn2__hdfs-site',
+        displayName: 'dfs.namenode.http-address.haservice.nn2',
+        displayType: 'string',
+        name: 'dfs.namenode.http-address.haservice.nn2',
+        value: 'c6402.ambari.apache.org:50070',
+        recommendedValue: 'c6402.ambari.apache.org:50070'
+      }
+    ];
+
+    it('should copy properties from hdfs-site to hdfs-client for HAWQ', 
function() {
+      var oldConfigs = configs.slice();
+      installerStep7Controller.addHawqConfigsOnNnHa(configs);
+      oldConfigs.forEach(function(property){
+        // find the same property in hdfs-client for HAWQ and see if attribute 
value matches with the corresponding property's attribute value in hdfs-site
+        expect(configs.findProperty('id', property.name + 
'__hdfs-client').description).to.be.eql(property.description);
+        expect(configs.findProperty('id', property.name + 
'__hdfs-client').displayName).to.be.eql(property.displayName);
+        expect(configs.findProperty('id', property.name + 
'__hdfs-client').value).to.be.eql(property.value);
+        expect(configs.findProperty('id', property.name + 
'__hdfs-client').recommendedValue).to.be.eql(property.recommendedValue);
+      });
+    });
+  });
+
   describe('#errorsCount', function () {
 
     it('should ignore configs with widgets (enhanced configs)', function () {

Reply via email to