Selaa lähdekoodia

AMBARI-11417. Adding HBase service fails after HA is enabled (onechiporenko)

Oleg Nechiporenko 10 vuotta sitten
vanhempi
commit
64ce4989ee

+ 37 - 20
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);
       }
     }
 
@@ -794,6 +776,41 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
     this.set('stepConfigs', serviceConfigs);
   },
 
+  /**
+   * 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

+ 1 - 1
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 = [];

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