Repository: ambari Updated Branches: refs/heads/trunk b570fc1f7 -> 64ce4989e
AMBARI-11417. Adding HBase service fails after HA is enabled (onechiporenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/64ce4989 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/64ce4989 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/64ce4989 Branch: refs/heads/trunk Commit: 64ce4989eee30dc9d83dbc8e7731336ab20f37eb Parents: b570fc1 Author: Oleg Nechiporenko <onechipore...@apache.org> Authored: Wed May 27 14:49:00 2015 +0300 Committer: Oleg Nechiporenko <onechipore...@apache.org> Committed: Wed May 27 14:51:27 2015 +0300 ---------------------------------------------------------------------- .../app/controllers/wizard/step7_controller.js | 57 +++++++++++++------- ambari-web/app/utils/config.js | 2 +- .../test/controllers/wizard/step7_test.js | 47 ++++++++++++++++ 3 files changed, 85 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/64ce4989/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 b8771e5..a3297ff 100644 --- a/ambari-web/app/controllers/wizard/step7_controller.js +++ b/ambari-web/app/controllers/wizard/step7_controller.js @@ -749,32 +749,14 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E var isInstallableService = App.StackService.find(serviceName).get('isInstallable'); if (!isInstallableService) serviceConfigObj.set('showConfig', false); }, this); - // if HA is enabled -> Remove SNameNode, hbase.rootdir should use Name Service ID + // if HA is enabled -> Remove SNameNode if (App.get('isHaEnabled')) { var c = serviceConfigs.findProperty('serviceName', 'HDFS').configs, - nameServiceId = c.findProperty('name', 'dfs.nameservices'), removedConfigs = c.filterProperty('category', 'SECONDARY_NAMENODE'); removedConfigs.setEach('isVisible', false); serviceConfigs.findProperty('serviceName', 'HDFS').configs = c; - if(this.get('selectedServiceNames').contains('HBASE') && nameServiceId){ - var hRootDir = serviceConfigs.findProperty('serviceName', 'HBASE').configs.findProperty('name','hbase.rootdir'), - valueToChange = hRootDir.get('value').replace(/\/\/.*:/i, '//' + nameServiceId.get('value') + ':'); - - hRootDir.setProperties({ - 'value': valueToChange, - 'recommendedValue' : valueToChange - }); - } - if(this.get('selectedServiceNames').contains('ACCUMULO') && nameServiceId){ - var vols = serviceConfigs.findProperty('serviceName', 'ACCUMULO').configs.findProperty('name','instance.volumes'), - valueToChange = vols.get('value').replace(/\/\/.*:[0-9]+/i, '//' + nameServiceId.get('value')); - - vols.setProperties({ - 'value': valueToChange, - 'recommendedValue' : valueToChange - }); - } + serviceConfigs = this._reconfigureServicesOnNnHa(serviceConfigs); } } @@ -795,6 +777,41 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E }, /** + * When NameNode HA is enabled some configs based on <code>dfs.nameservices</code> should be changed + * This happens only if service is added AFTER NN HA is enabled + * + * @param {App.ServiceConfig[]} serviceConfigs + * @method _reconfigureServiceOnNnHa + * @private + * @returns {App.ServiceConfig[]} + */ + _reconfigureServicesOnNnHa: function (serviceConfigs) { + var selectedServiceNames = this.get('selectedServiceNames'); + var nameServiceId = serviceConfigs.findProperty('serviceName', 'HDFS').configs.findProperty('name', 'dfs.nameservices'); + Em.A([ + { + serviceName: 'HBASE', + configToUpdate: 'hbase.rootdir' + }, + { + serviceName: 'ACCUMULO', + configToUpdate: 'instance.volumes' + } + ]).forEach(function (c) { + if (selectedServiceNames.contains(c.serviceName) && nameServiceId) { + var cfg = serviceConfigs.findProperty('serviceName', c.serviceName).configs.findProperty('name', c.configToUpdate), + newValue = cfg.get('value').replace(/\/\/.*:[0-9]+/i, '//' + nameServiceId.get('value')); + + cfg.setProperties({ + value: newValue, + recommendedValue: newValue + }); + } + }); + return serviceConfigs; + }, + + /** * Select first addable service for <code>addServiceWizard</code> * Select first service at all in other cases * @method selectProperService http://git-wip-us.apache.org/repos/asf/ambari/blob/64ce4989/ambari-web/app/utils/config.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/config.js b/ambari-web/app/utils/config.js index 976c251..353168b 100644 --- a/ambari-web/app/utils/config.js +++ b/ambari-web/app/utils/config.js @@ -711,7 +711,7 @@ App.config = Em.Object.create({ * @param allSelectedServiceNames * @param installedServiceNames * @param localDB - * @return {Array} + * @return {App.ServiceConfig[]} */ renderConfigs: function (configs, storedConfigs, allSelectedServiceNames, installedServiceNames, localDB) { var renderedServiceConfigs = []; http://git-wip-us.apache.org/repos/asf/ambari/blob/64ce4989/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 acd3fbf..35bd6d0 100644 --- a/ambari-web/test/controllers/wizard/step7_test.js +++ b/ambari-web/test/controllers/wizard/step7_test.js @@ -2046,4 +2046,51 @@ describe('App.InstallerStep7Controller', function () { }); + describe('#_reconfigureServicesOnNnHa', function () { + + var dfsNameservices = 'some_cluster'; + + Em.A([ + { + serviceName: 'HBASE', + configToUpdate: 'hbase.rootdir', + oldValue: 'hdfs://nameserv:8020/apps/hbase/data', + expectedNewValue: 'hdfs://' + dfsNameservices + '/apps/hbase/data' + }, + { + serviceName: 'ACCUMULO', + configToUpdate: 'instance.volumes', + oldValue: 'hdfs://localhost:8020/apps/accumulo/data', + expectedNewValue: 'hdfs://' + dfsNameservices + '/apps/accumulo/data' + } + ]).forEach(function (test) { + it(test.serviceName + ' ' + test.configToUpdate, function () { + var serviceConfigs = [App.ServiceConfig.create({ + serviceName: test.serviceName, + configs: [ + Em.Object.create({ + name: test.configToUpdate, + value: test.oldValue + }) + ] + }), + App.ServiceConfig.create({ + serviceName: 'HDFS', + configs: [ + Em.Object.create({ + name: 'dfs.nameservices', + value: dfsNameservices + }) + ] + })]; + installerStep7Controller.reopen({ + selectedServiceNames: [test.serviceName, 'HDFS'] + }); + serviceConfigs = installerStep7Controller._reconfigureServicesOnNnHa(serviceConfigs); + expect(serviceConfigs.findProperty('serviceName', test.serviceName).configs.findProperty('name', test.configToUpdate).get('value')).to.equal(test.expectedNewValue); + }); + }); + + }); + });