You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2015/04/30 04:39:32 UTC

ambari git commit: AMBARI-10457. Storm Nimbus HA. (Sriharsha Chintalapani via yusaku)

Repository: ambari
Updated Branches:
  refs/heads/trunk 5f95f11bc -> 97c524d96


AMBARI-10457. Storm Nimbus HA. (Sriharsha Chintalapani via yusaku)


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

Branch: refs/heads/trunk
Commit: 97c524d969fb7b1d405ade65e3237bf7cb8ccb78
Parents: 5f95f11
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Wed Apr 29 19:38:54 2015 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Wed Apr 29 19:38:54 2015 -0700

----------------------------------------------------------------------
 .../stacks/HDP/2.3/services/STORM/metainfo.xml  |  23 +++
 ambari-web/app/controllers/main/host/details.js | 148 +++++++++++++++++++
 ambari-web/app/data/HDP2/site_properties.js     |  13 ++
 ambari-web/app/messages.js                      |   2 +
 .../app/utils/configs/config_property_helper.js |   3 +
 ambari-web/test/utils/config_test.js            |   2 +-
 6 files changed, 190 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/97c524d9/ambari-server/src/main/resources/stacks/HDP/2.3/services/STORM/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/STORM/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/STORM/metainfo.xml
index b4dc4a1..092a4d0 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/STORM/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/STORM/metainfo.xml
@@ -40,6 +40,29 @@
           </packages>
         </osSpecific>
       </osSpecifics>
+      <components>
+        <component>
+          <name>NIMBUS</name>
+          <displayName>Nimbus</displayName>
+          <category>MASTER</category>
+          <cardinality>1+</cardinality>
+          <versionAdvertised>true</versionAdvertised>
+          <dependencies>
+            <dependency>
+              <name>ZOOKEEPER/ZOOKEEPER_SERVER</name>
+              <scope>cluster</scope>
+              <auto-deploy>
+                <enabled>true</enabled>
+              </auto-deploy>
+            </dependency>
+          </dependencies>
+          <commandScript>
+            <script>scripts/nimbus.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>1200</timeout>
+          </commandScript>
+        </component>
+      </components>
     </service>
   </services>
 </metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/97c524d9/ambari-web/app/controllers/main/host/details.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/host/details.js b/ambari-web/app/controllers/main/host/details.js
index d23fc79..15df59f 100644
--- a/ambari-web/app/controllers/main/host/details.js
+++ b/ambari-web/app/controllers/main/host/details.js
@@ -233,6 +233,12 @@ App.MainHostDetailsController = Em.Controller.extend({
       deleteHiveMetastoreMsg: Em.View.extend({
         template: Em.Handlebars.compile(Em.I18n.t('hosts.host.deleteComponent.popup.deleteHiveMetastore'))
       }),
+      isNimbus: function () {
+        return componentName == 'NIMBUS';
+      }.property(),
+      deleteNimbusMsg: Em.View.extend({
+        template: Em.Handlebars.compile(Em.I18n.t('hosts.host.deleteComponent.popup.deleteNimbus'))
+      }),
       isChecked: false,
       disablePrimary: function () {
         return !this.get('isChecked');
@@ -329,6 +335,9 @@ App.MainHostDetailsController = Em.Controller.extend({
     } else if (data.componentName == 'HIVE_METASTORE') {
       this.set('deleteHiveMetaStore', true);
       this.loadConfigs('loadHiveConfigs');
+    } else if(data.componentName == 'NIMBUS') {
+      this.set('deleteNimbusHost', true);
+      this.loadConfigs('loadStormConfigs');
     }
   },
 
@@ -449,6 +458,7 @@ App.MainHostDetailsController = Em.Controller.extend({
       self = this,
       hiveHost = event.hiveMetastoreHost ? event.hiveMetastoreHost : "";
       component = event.context,
+      hostName = this.get('content.hostName'),
       componentName = component.get('componentName'),
       missedComponents = !!hiveHost ? [] : componentsUtils.checkComponentDependencies(componentName, {
         scope: 'host',
@@ -474,6 +484,12 @@ App.MainHostDetailsController = Em.Controller.extend({
           self.loadConfigs("loadHiveConfigs");
         }, Em.I18n.t('hosts.host.addComponent.' + componentName ));
         break;
+      case 'NIMBUS':
+        returnFunc = App.showConfirmationPopup(function() {
+            self.set('nimbusHost', hostName);
+            self.loadConfigs("loadStormConfigs");
+        }, Em.I18n.t('hosts.host.addComponent.' + componentName));
+        break;
       default:
         returnFunc = this.addClientComponent(component);
       }
@@ -627,6 +643,114 @@ App.MainHostDetailsController = Em.Controller.extend({
     this.get('isOozieConfigLoaded').resolve();
   },
 
+
+  /**
+   * Success callback for Storm load configs request
+   * @param {object} data
+   * @method loadStormConfigs
+   */
+  loadStormConfigs: function (data) {
+    App.ajax.send({
+      name: 'admin.get.all_configurations',
+      sender: this,
+      data: {
+          urlParams: '(type=storm-site&tag=' + data.Clusters.desired_configs['storm-env'].tag +')'
+      },
+      success: 'onLoadStormConfigs'
+    });
+  },
+
+  /**
+   * update and save Storm related configs to server
+   * @param {object} data
+   * @method onLoadStormConfigs
+   */
+   onLoadStormConfigs: function (data) {
+    var
+      nimbusHost = this.get('nimbusHost'),
+      stormNimbusHosts = this.getStormNimbusHosts(),
+      configs = {},
+      attributes = {};
+
+       data.items.forEach(function (item) {
+           configs[item.type] = item.properties;
+           attributes[item.type] = item.properties_attributes || {};
+       }, this);
+
+       configs['storm-site']['nimbus.seeds'] = stormNimbusHosts.join(',');
+       var groups = [
+           {
+               properties: {
+                   'storm-site': configs['storm-site'],
+                   'storm-env': configs['storm-env']
+               },
+               properties_attributes: {
+                   'storm-site': attributes['storm-site'],
+                   'storm-env': attributes['storm-env']
+               }
+           },
+           {
+               properties: {
+                   'core-site': configs['core-site']
+               },
+               properties_attributes: {
+                   'core-site': attributes['core-site']
+               }
+           }
+       ];
+    this.saveStormConfigsBatch(groups, nimbusHost);
+   },
+
+     /**
+   * save configs' sites in batch
+   * @param nimbusHost
+   * @param groups
+   */
+  saveStormConfigsBatch: function (groups, nimbusHost) {
+    groups.forEach(function (group) {
+      var desiredConfigs = [],
+        tag = 'version' + (new Date).getTime(),
+        properties = group.properties;
+
+      for (var site in properties) {
+        if (!properties.hasOwnProperty(site) || Em.isNone(properties[site])) continue;
+        desiredConfigs.push({
+          "type": site,
+          "tag": tag,
+          "properties": properties[site],
+          "properties_attributes": group.properties_attributes[site],
+          "service_config_version_note": Em.I18n.t('hosts.host.storm.configs.save.note')
+        });
+      }
+      if (desiredConfigs.length > 0) {
+        App.ajax.send({
+          name: 'common.service.configurations',
+          sender: this,
+          data: {
+            desired_config: desiredConfigs,
+            stormNimbusHost: nimbusHost
+          },
+          success: 'installStormNimbus'
+        });
+      }
+      //clear nimbus host not to send second request to install component
+      nimbusHost = null;
+    }, this);
+  },
+
+  /**
+   * success callback for saveStormConfigsBatch method
+   * @param data
+   * @param opt
+   * @param params
+   */
+  installStormNimbus: function(data, opt, params) {
+    if (params.stormNimbusHost) {
+      componentsUtils.installHostComponent(params.stormNimbusHost, App.StackServiceComponent.find("NIMBUS"));
+    }
+  },
+  /**
+
   /**
    * Success callback for load configs request
    * @param {object} data
@@ -777,6 +901,30 @@ App.MainHostDetailsController = Em.Controller.extend({
   },
 
   /**
+   * Delete Storm Nimbus is performed
+   * @type {bool}
+   */
+  deleteNimbusHost: false,
+
+  getStormNimbusHosts: function () {
+    var
+      stormNimbusHosts = App.HostComponent.find().filterProperty('componentName', 'NIMBUS').mapProperty('hostName'),
+      nimbusHost = this.get('nimbusHost');
+
+    if(!!nimbusHost){
+      stormNimbusHosts.push(nimbusHost);
+      this.set('nimbusHost', '');
+    }
+
+    if (this.get('fromDeleteHost') || this.get('deleteNimbusHost')) {
+      this.set('deleteNimbusHost', false);
+      this.set('fromDeleteHost', false);
+      return stormNimbusHosts.without(this.get('content.hostName'));
+    }
+    return stormNimbusHosts.sort();
+  },
+
+  /**
    * Send command to server to resfresh configs of selected component
    * @param {object} event
    * @method refreshComponentConfigs

http://git-wip-us.apache.org/repos/asf/ambari/blob/97c524d9/ambari-web/app/data/HDP2/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/site_properties.js b/ambari-web/app/data/HDP2/site_properties.js
index 274b673..a35104e 100644
--- a/ambari-web/app/data/HDP2/site_properties.js
+++ b/ambari-web/app/data/HDP2/site_properties.js
@@ -1032,6 +1032,19 @@ var hdp2properties = [
   },
   {
     "id": "site property",
+    "name": "nimbus.seeds",
+    "displayName": "nimbus.seeds",
+    "displayType": "masterHosts",
+    "isOverridable": false,
+    "serviceName": "STORM",
+    "filename": "storm-site.xml",
+    "category": "NIMBUS",
+    "stack": {
+      "HDP": "2.3"
+    }
+  },
+  {
+    "id": "site property",
     "name": "nimbus.thrift.port",
     "displayName": "nimbus.thrift.port",
     "displayType": "int",

http://git-wip-us.apache.org/repos/asf/ambari/blob/97c524d9/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 3b4105b..9bf0108 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -2152,6 +2152,8 @@ Em.I18n.translations = {
   'hosts.host.zooKeeper.configs.save.note': 'This configuration is created by ambari while installing/deleting zookeeper component on a host',
   'hosts.host.addComponent.securityNote':'You are running your cluster in secure mode. You must set up the keytab for {0} on {1} before you proceed. Otherwise, the component will not be able to start properly.',
   'hosts.host.addComponent.popup.confirm':'Confirm Add',
+  'hosts.host.deleteComponent.popup.deleteNimbus':'Deleting <i>Storm Nimbus</i> will reconfigure the <b>nimbus.seeds</b> property if it is defined.',
+  'hosts.host.storm.configs.save.note': 'This configuration is created by ambari while installing/deleting storm component on a host',
   'hosts.host.datanode.decommission':'Decommission DataNode',
   'hosts.host.datanode.recommission':'Recommission DataNode',
   'hosts.host.nodemanager.decommission':'Decommission NodeManager',

http://git-wip-us.apache.org/repos/asf/ambari/blob/97c524d9/ambari-web/app/utils/configs/config_property_helper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/configs/config_property_helper.js b/ambari-web/app/utils/configs/config_property_helper.js
index 76b294f..333214c 100644
--- a/ambari-web/app/utils/configs/config_property_helper.js
+++ b/ambari-web/app/utils/configs/config_property_helper.js
@@ -204,6 +204,9 @@ module.exports = {
       case 'nimbus.host':
         configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'NIMBUS').hostName);
         break;
+      case 'nimbus.seeds':
+        configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'NIMBUS').mapProperty('hostName'));
+        break;
       case 'falconserver_host':
         configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'FALCON_SERVER').hostName);
         break;

http://git-wip-us.apache.org/repos/asf/ambari/blob/97c524d9/ambari-web/test/utils/config_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/config_test.js b/ambari-web/test/utils/config_test.js
index 1649db9..d529560 100644
--- a/ambari-web/test/utils/config_test.js
+++ b/ambari-web/test/utils/config_test.js
@@ -432,7 +432,7 @@ describe('App.config', function () {
   });
 
   describe('#preDefinedSiteProperties-stack-attribute', function() {
-    var HDP23Only = ['nfs.dump.dir', 'nfs.exports.allowed.hosts'];
+    var HDP23Only = ['nfs.dump.dir', 'nfs.exports.allowed.hosts', 'nimbus.seeds'];
     it('should ignore properties that not belongs to stack HDP - 2.2', function() {
       setups.setupStackVersion(this, 'HDP-2.2');
       expect(App.config.get('preDefinedSiteProperties').mapProperty('name')).to.not.include.members(HDP23Only);