Repository: ambari Updated Branches: refs/heads/trunk cc452ed8f -> 6b810e141
AMBARI-14225. NN HA wizard should update hawq_dfs_url with nameservice when ha is enabled by ambari(Bhuvnesh Chaudhary via odiachenko). Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6b810e14 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6b810e14 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6b810e14 Branch: refs/heads/trunk Commit: 6b810e1415699571c0e34d419d033130de15a7d8 Parents: cc452ed Author: Oleksandr Diachenko <[email protected]> Authored: Thu Dec 17 10:54:50 2015 -0800 Committer: Oleksandr Diachenko <[email protected]> Committed: Thu Dec 17 10:54:54 2015 -0800 ---------------------------------------------------------------------- .../nameNode/rollback_controller.js | 32 ++++++++++++++++++++ .../nameNode/step3_controller.js | 5 +++ .../nameNode/step9_controller.js | 21 ++++++++++++- ambari-web/app/data/HDP2/ha_properties.js | 17 +++++++++-- ambari-web/app/messages.js | 7 +++-- .../utils/configs/nn_ha_config_initializer.js | 25 ++++++++++++++- .../nameNode/step3_controller_test.js | 15 ++++++++- 7 files changed, 114 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/6b810e14/ambari-web/app/controllers/main/admin/highAvailability/nameNode/rollback_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/rollback_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/rollback_controller.js index 54ffff2..6f05e6c 100644 --- a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/rollback_controller.js +++ b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/rollback_controller.js @@ -34,6 +34,7 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl 'stopAllServices', 'restoreHBaseConfigs', 'restoreAccumuloConfigs', + 'restoreHawqConfigs', 'stopFailoverControllers', 'deleteFailoverControllers', 'stopStandbyNameNode', @@ -67,6 +68,7 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl 'startAllServices', 'reconfigureHBase', 'reconfigureAccumulo', + 'reconfigureHawq', 'startZKFC', 'installZKFC', 'startSecondNameNode', @@ -98,6 +100,10 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl if (!App.Service.find().someProperty('serviceName', 'ACCUMULO') && accumuloTask) { this.get('tasks').splice(accumuloTask.get('id'), 1); } + var hawqTask = this.get('tasks').findProperty('command', 'restoreHawqConfigs'); + if (!App.Service.find().someProperty('serviceName', 'HAWQ') && hawqTask) { + this.get('tasks').splice(hawqTask.get('id'), 1); + } }, clearStep: function () { @@ -237,6 +243,19 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl error: 'onTaskError' }); }, + restoreHawqConfigs: function(){ + this.loadConfigTag("hawqSiteTag"); + var hawqSiteTag = this.get("content.hawqSiteTag"); + App.ajax.send({ + name: 'admin.high_availability.load_hawq_configs', + sender: this, + data: { + hawqSiteTag: hawqSiteTag + }, + success: 'onLoadHawqConfigs', + error: 'onTaskError' + }); + }, stopFailoverControllers: function(){ var hostNames = this.get('content.masterComponentHosts').filterProperty('component', 'NAMENODE').mapProperty('hostName'); @@ -315,6 +334,19 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl }); }, + onLoadHawqConfigs: function (data) { + var hawqSiteProperties = data.items.findProperty('type', 'hawq-site').properties; + App.ajax.send({ + name: 'admin.high_availability.save_configs', + sender: this, + data: { + siteName: 'hawq-site', + properties: hawqSiteProperties + }, + success: 'onTaskCompleted', + error: 'onTaskError' + }); + }, onDeletedHDFSClient: function () { var deletedHdfsClients = this.get('deletedHdfsClients'); var hostName = this.get("content.hdfsClientHostNames"); http://git-wip-us.apache.org/repos/asf/ambari/blob/6b810e14/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js index b97f89e..b420687 100644 --- a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js +++ b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js @@ -96,6 +96,11 @@ App.HighAvailabilityWizardStep3Controller = Em.Controller.extend({ urlParams.push('(type=ams-hbase-site&tag=' + amsHbaseSiteTag + ')'); this.set("amsHbaseSiteTag", {name : "amsHbaseSiteTag", value : amsHbaseSiteTag}); } + if (App.Service.find().someProperty('serviceName', 'HAWQ')) { + var hawqSiteTag = data.Clusters.desired_configs['hawq-site'].tag; + urlParams.push('(type=hawq-site&tag=' + hawqSiteTag + ')'); + this.set("hawqSiteTag", {name : "hawqSiteTag", value : hawqSiteTag}); + } App.ajax.send({ name: 'admin.get.all_configurations', sender: this, http://git-wip-us.apache.org/repos/asf/ambari/blob/6b810e14/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step9_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step9_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step9_controller.js index 580977a..4b661ca 100644 --- a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step9_controller.js +++ b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step9_controller.js @@ -22,10 +22,11 @@ App.HighAvailabilityWizardStep9Controller = App.HighAvailabilityProgressPageCont name:"highAvailabilityWizardStep9Controller", - commands: ['startSecondNameNode', 'installZKFC', 'startZKFC', 'reconfigureHBase', 'reconfigureAccumulo', 'deleteSNameNode', 'startAllServices'], + commands: ['startSecondNameNode', 'installZKFC', 'startZKFC', 'reconfigureHBase', 'reconfigureAccumulo', 'reconfigureHawq', 'deleteSNameNode', 'startAllServices'], hbaseSiteTag: "", accumuloSiteTag: "", + hawqSiteTag: "", initializeTasks: function () { this._super(); @@ -36,6 +37,10 @@ App.HighAvailabilityWizardStep9Controller = App.HighAvailabilityProgressPageCont } if (!App.Service.find().someProperty('serviceName', 'ACCUMULO')) { this.get('tasks').splice(this.get('tasks').findProperty('command', 'reconfigureAccumulo').get('id') - numSpliced, 1); + numSpliced++ ; + } + if (!App.Service.find().someProperty('serviceName', 'HAWQ')) { + this.get('tasks').splice(this.get('tasks').findProperty('command', 'reconfigureHawq').get('id') - numSpliced, 1); } }, @@ -82,6 +87,20 @@ App.HighAvailabilityWizardStep9Controller = App.HighAvailabilityProgressPageCont }); }, + reconfigureHawq: function () { + var data = this.get('content.serviceConfigProperties'); + var configData = this.reconfigureSites(['hawq-site'], data, Em.I18n.t('admin.highAvailability.step4.save.configuration.note').format(App.format.role('NAMENODE'))); + App.ajax.send({ + name: 'common.service.configurations', + sender: this, + data: { + desired_config: configData + }, + success: 'saveConfigTag', + error: 'onTaskError' + }); + }, + saveConfigTag: function () { App.clusterStatus.setClusterStatus({ clusterName: this.get('content.cluster.name'), http://git-wip-us.apache.org/repos/asf/ambari/blob/6b810e14/ambari-web/app/data/HDP2/ha_properties.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/data/HDP2/ha_properties.js b/ambari-web/app/data/HDP2/ha_properties.js index 627018a..8b2960d 100644 --- a/ambari-web/app/data/HDP2/ha_properties.js +++ b/ambari-web/app/data/HDP2/ha_properties.js @@ -25,9 +25,10 @@ module.exports = App.ServiceConfigCategory.create({ name: 'HDFS', displayName: 'HDFS'}), App.ServiceConfigCategory.create({ name: 'HBASE', displayName: 'HBase'}), App.ServiceConfigCategory.create({ name: 'ACCUMULO', displayName: 'Accumulo'}), - App.ServiceConfigCategory.create({ name: 'AMBARI_METRICS', displayName: 'Ambari Metrics'}) + App.ServiceConfigCategory.create({ name: 'AMBARI_METRICS', displayName: 'Ambari Metrics'}), + App.ServiceConfigCategory.create({ name: 'HAWQ', displayName: 'HAWQ'}) ], - sites: ['core-site', 'hdfs-site', 'hbase-site', 'accumulo-site', 'ams-hbase-site'], + sites: ['core-site', 'hdfs-site', 'hbase-site', 'accumulo-site', 'ams-hbase-site', 'hawq-site'], configs: [ /**********************************************HDFS***************************************/ { @@ -250,6 +251,18 @@ module.exports = "isVisible": false, "filename": "ams-hbase-site", "serviceName": 'MISC' + }, + /**********************************************HAWQ***************************************/ + { + "name": "hawq_dfs_url", + "displayName": "hawq_dfs_url", + "description": "URL for Accessing HDFS", + "isReconfigurable": false, + "recommendedValue": "haCluster/hawq_default", + "value": "haCluster/hawq_default", + "category": "HAWQ", + "filename": "hawq-site", + "serviceName": 'MISC' } ] } http://git-wip-us.apache.org/repos/asf/ambari/blob/6b810e14/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index 4ce2592..82b3b4a 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -1212,8 +1212,9 @@ Em.I18n.translations = { 'admin.highAvailability.wizard.step9.task2.title':'Start Failover Controllers', 'admin.highAvailability.wizard.step9.task3.title':'Reconfigure HBase', 'admin.highAvailability.wizard.step9.task4.title':'Reconfigure Accumulo', - 'admin.highAvailability.wizard.step9.task5.title':'Delete Secondary NameNode', - 'admin.highAvailability.wizard.step9.task6.title':'Start All Services', + 'admin.highAvailability.wizard.step9.task5.title':'Reconfigure Hawq', + 'admin.highAvailability.wizard.step9.task6.title':'Delete Secondary NameNode', + 'admin.highAvailability.wizard.step9.task7.title':'Start All Services', 'admin.highAvailability.wizard.step9.notice.completed':'NameNode HA has been enabled successfully.', 'admin.highAvailability.wizard.step3.curNameNode': '<b>Current NameNode:</b> ', @@ -2815,4 +2816,4 @@ Em.I18n.translations = { 'utils.ajax.defaultErrorPopupBody.statusCode': '{0} status code', 'wizard.inProgress': '{0} in Progress' -}; +}; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/6b810e14/ambari-web/app/utils/configs/nn_ha_config_initializer.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/configs/nn_ha_config_initializer.js b/ambari-web/app/utils/configs/nn_ha_config_initializer.js index 9e18c0b..80eca42 100644 --- a/ambari-web/app/utils/configs/nn_ha_config_initializer.js +++ b/ambari-web/app/utils/configs/nn_ha_config_initializer.js @@ -120,6 +120,7 @@ App.NnHaConfigInitializer = App.HaConfigInitializerClass.create({ uniqueInitializers: { 'hbase.rootdir': '_initHbaseRootDir', + 'hawq_dfs_url': '_initHawqDfsUrl', 'instance.volumes': '_initInstanceVolumes', 'instance.volumes.replacements': '_initInstanceVolumesReplacements', 'dfs.journalnode.edits.dir': '_initDfsJnEditsDir' @@ -283,6 +284,28 @@ App.NnHaConfigInitializer = App.HaConfigInitializerClass.create({ }, /** + * Unique initializer for <code>hawq_dfs_url</code> (Hawq service) + * + * @param {configProperty} configProperty + * @param {extendedTopologyLocalDB} localDB + * @param {nnHaConfigDependencies} dependencies + * @param {object} initializer + * @method _initHawqDfsUrl + * @return {object} + * @private + */ + _initHawqDfsUrl: function (configProperty, localDB, dependencies, initializer) { + if (localDB.installedServices.contains('HAWQ')) { + var value = dependencies.serverConfigs.findProperty('type', 'hawq-site').properties['hawq_dfs_url'].replace(/(^.*:[0-9]+)(?=\/)/, dependencies.namespaceId); + Em.setProperties(configProperty, { + value: value, + recommendedValue: value + }); + } + return configProperty; + }, + + /** * Unique initializer for <code>instance.volumes</code> * * @param {configProperty} configProperty @@ -352,4 +375,4 @@ App.NnHaConfigInitializer = App.HaConfigInitializerClass.create({ return configProperty; } -}); \ No newline at end of file +}); http://git-wip-us.apache.org/repos/asf/ambari/blob/6b810e14/ambari-web/test/controllers/main/admin/highAvailability/nameNode/step3_controller_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/admin/highAvailability/nameNode/step3_controller_test.js b/ambari-web/test/controllers/main/admin/highAvailability/nameNode/step3_controller_test.js index 75f4e53..7fbb4ca 100644 --- a/ambari-web/test/controllers/main/admin/highAvailability/nameNode/step3_controller_test.js +++ b/ambari-web/test/controllers/main/admin/highAvailability/nameNode/step3_controller_test.js @@ -56,6 +56,12 @@ describe('App.HighAvailabilityWizardStep3Controller', function() { properties: { 'instance.volumes': 'hdfs://localhost:8020/apps/accumulo/data' } + }, + { + type: 'hawq-site', + properties: { + 'hawq_dfs_url': 'localhost:8020/hawq_default' + } } ] }; @@ -215,7 +221,7 @@ describe('App.HighAvailabilityWizardStep3Controller', function() { var get = sinon.stub(App, 'get'); get.withArgs('isHadoopWindowsStack').returns(true); sinon.stub(App.Service, 'find', function () { - return [{serviceName: 'HDFS'}, {serviceName: 'HBASE'}, {serviceName: 'AMBARI_METRICS'}, {serviceName: 'ACCUMULO'}] + return [{serviceName: 'HDFS'}, {serviceName: 'HBASE'}, {serviceName: 'AMBARI_METRICS'}, {serviceName: 'ACCUMULO'}, {serviceName: 'HAWQ'}] }); }); @@ -310,6 +316,13 @@ describe('App.HighAvailabilityWizardStep3Controller', function() { name: 'dfs.journalnode.edits.dir' }, value: '/hadoop/hdfs/journalnode123' + }, + { + config: { + name: 'hawq_dfs_url', + filename: 'hawq-site' + }, + value: nameServiceId + '/hawq_default' } ]).forEach(function (test) { it(test.config.name, function () {
