SLIDER-324. Exports should be attributed to individual master components rather than only one master component
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/bc9561d5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/bc9561d5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/bc9561d5 Branch: refs/heads/feature/SLIDER-151_REST_API Commit: bc9561d59d3c0a68a6abaa47e8a91b87a36a1287 Parents: 599e972 Author: Sumit Mohanty <smoha...@hortonworks.com> Authored: Fri Aug 15 13:32:12 2014 -0700 Committer: Sumit Mohanty <smoha...@hortonworks.com> Committed: Fri Aug 15 13:32:12 2014 -0700 ---------------------------------------------------------------------- app-packages/storm/metainfo.xml | 28 ++++---- .../agent/application/metadata/Component.java | 21 ++++-- .../application/metadata/ComponentExport.java | 54 ++++++++++++++ .../application/metadata/MetainfoParser.java | 9 +-- .../agent/TestAgentProviderService.java | 23 +++--- .../agent/application/metadata/metainfo.xml | 74 ++++++++++++++++++-- 6 files changed, 171 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc9561d5/app-packages/storm/metainfo.xml ---------------------------------------------------------------------- diff --git a/app-packages/storm/metainfo.xml b/app-packages/storm/metainfo.xml index e94bc62..d9004ad 100644 --- a/app-packages/storm/metainfo.xml +++ b/app-packages/storm/metainfo.xml @@ -29,21 +29,25 @@ <name>QuickLinks</name> <exports> <export> - <name>org.apache.slider.jmx</name> + <name>app.jmx</name> <value>http://${STORM_REST_API_HOST}:${site.global.rest_api_port}/api/cluster/summary</value> </export> <export> - <name>org.apache.slider.monitor</name> + <name>app.monitor</name> <value>http://${STORM_UI_SERVER_HOST}:${site.storm-site.ui.port}</value> </export> <export> - <name>org.apache.slider.metrics</name> + <name>app.metrics</name> <value>http://${site.global.ganglia_server_host}/cgi-bin/rrd.py?c=${site.global.ganglia_server_id}</value> </export> <export> - <name>org.apache.slider.ganglia</name> + <name>ganglia.ui</name> <value>http://${site.global.ganglia_server_host}/ganglia?c=${site.global.ganglia_server_id}</value> </export> + <export> + <name>nimbus.url</name> + <value>http://${NIMBUS_HOST}:${site.storm-site.nimbus.thrift.port}</value> + </export> </exports> </exportGroup> </exportGroups> @@ -78,6 +82,7 @@ <name>NIMBUS</name> <category>MASTER</category> <autoStartOnFailure>true</autoStartOnFailure> + <appExports>QuickLinks-nimbus.url,QuickLinks-ganglia.ui,QuickLinks-app.metrics</appExports> <commandScript> <script>scripts/nimbus.py</script> <scriptType>PYTHON</scriptType> @@ -89,6 +94,7 @@ <name>STORM_REST_API</name> <category>MASTER</category> <autoStartOnFailure>true</autoStartOnFailure> + <appExports>QuickLinks-app.jmx</appExports> <commandScript> <script>scripts/rest_api.py</script> <scriptType>PYTHON</scriptType> @@ -100,12 +106,12 @@ <name>SUPERVISOR</name> <category>SLAVE</category> <autoStartOnFailure>true</autoStartOnFailure> - <exports> - <export> + <componentExports> + <componentExport> <name>log_viewer_port</name> <value>${THIS_HOST}:${site.storm-site.logviewer.port}</value> - </export> - </exports> + </componentExport> + </componentExports> <commandScript> <script>scripts/supervisor.py</script> <scriptType>PYTHON</scriptType> @@ -117,6 +123,7 @@ <name>STORM_UI_SERVER</name> <category>MASTER</category> <publishConfig>true</publishConfig> + <appExports>QuickLinks-app.monitor</appExports> <autoStartOnFailure>true</autoStartOnFailure> <commandScript> <script>scripts/ui_server.py</script> @@ -148,10 +155,5 @@ </packages> </osSpecific> </osSpecifics> - - <configuration-dependencies> - <config-type>storm-site</config-type> - <config-type>global</config-type> - </configuration-dependencies> </application> </metainfo> http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc9561d5/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java index acf6ecb..03c64d4 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java @@ -29,12 +29,13 @@ public class Component { String minInstanceCount; String maxInstanceCount; String autoStartOnFailure; + String appExports; CommandScript commandScript; - List<Export> exports; + List<ComponentExport> componentExports; public Component() { publishConfig = Boolean.FALSE.toString(); - exports = new ArrayList<Export>(); + componentExports = new ArrayList<ComponentExport>(); } public String getName() { @@ -69,6 +70,14 @@ public class Component { this.autoStartOnFailure = autoStartOnFailure; } + public String getAppExports() { + return appExports; + } + + public void setAppExports(String appExports) { + this.appExports = appExports; + } + public String getMinInstanceCount() { return minInstanceCount; } @@ -93,12 +102,12 @@ public class Component { this.commandScript = commandScript; } - public void addExport(Export export) { - exports.add(export); + public void addComponentExport(ComponentExport export) { + componentExports.add(export); } - public List<Export> getExports() { - return exports; + public List<ComponentExport> getComponentExports() { + return componentExports; } public Boolean getRequiresAutoRestart() { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc9561d5/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentExport.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentExport.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentExport.java new file mode 100644 index 0000000..a18854c --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentExport.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.slider.providers.agent.application.metadata; + +/** + * + */ +public class ComponentExport { + String name; + String value; + + public ComponentExport() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + @Override + public String toString() { + final StringBuilder sb = + new StringBuilder("{"); + sb.append(",\n\"name\": ").append(name); + sb.append(",\n\"value\": ").append(value); + sb.append('}'); + return sb.toString(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc9561d5/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java index ada5b83..4b91ff7 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java @@ -60,10 +60,11 @@ public class MetainfoParser { digester.addBeanPropertySetter("*/component/minInstanceCount"); digester.addBeanPropertySetter("*/component/maxInstanceCount"); digester.addBeanPropertySetter("*/component/autoStartOnFailure"); - digester.addObjectCreate("*/component/export", Export.class); - digester.addBeanPropertySetter("*/component/export/name"); - digester.addBeanPropertySetter("*/component/export/value"); - digester.addSetNext("*/component/export", "addExport"); + digester.addBeanPropertySetter("*/component/appExports"); + digester.addObjectCreate("*/component/componentExport", ComponentExport.class); + digester.addBeanPropertySetter("*/component/componentExport/name"); + digester.addBeanPropertySetter("*/component/componentExport/value"); + digester.addSetNext("*/component/componentExport", "addComponentExport"); digester.addSetNext("*/component", "addComponent"); digester.addObjectCreate("*/commandScript", CommandScript.class); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc9561d5/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java ---------------------------------------------------------------------- diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java index 20c16ff..1ea11a6 100644 --- a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java +++ b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java @@ -43,6 +43,7 @@ import org.apache.slider.core.launch.ContainerLauncher; import org.apache.slider.providers.agent.application.metadata.Application; import org.apache.slider.providers.agent.application.metadata.CommandOrder; import org.apache.slider.providers.agent.application.metadata.Component; +import org.apache.slider.providers.agent.application.metadata.ComponentExport; import org.apache.slider.providers.agent.application.metadata.Export; import org.apache.slider.providers.agent.application.metadata.ExportGroup; import org.apache.slider.providers.agent.application.metadata.Metainfo; @@ -138,6 +139,7 @@ public class TestAgentProviderService { + " <name>HBASE_MASTER</name>\n" + " <category>MASTER</category>\n" + " <autoStartOnFailure>true</autoStartOnFailure>\n" + + " <appExports>QuickLinks-JMX_Endpoint,QuickLinks-Master_Status</appExports>\n" + " <minInstanceCount>1</minInstanceCount>\n" + " <maxInstanceCount>2</maxInstanceCount>\n" + " <commandScript>\n" @@ -155,16 +157,16 @@ public class TestAgentProviderService { + " <script>scripts/hbase_regionserver.py</script>\n" + " <scriptType>PYTHON</scriptType>\n" + " </commandScript>\n" - + " <exports>\n" - + " <export>\n" + + " <componentExports>\n" + + " <componentExport>\n" + " <name>PropertyA</name>\n" + " <value>${THIS_HOST}:${site.global.listen_port}</value>\n" - + " </export>\n" - + " <export>\n" + + " </componentExport>\n" + + " <componentExport>\n" + " <name>PropertyB</name>\n" + " <value>AConstant</value>\n" - + " </export>\n" - + " </exports>\n" + + " </componentExport>\n" + + " </componentExport>\n" + " </component>\n" + " </components>\n" + " <osSpecifics>\n" @@ -496,7 +498,8 @@ public class TestAgentProviderService { Assert.assertEquals(component.getMaxInstanceCount(), "2"); Assert.assertEquals(component.getCommandScript().getScript(), "scripts/hbase_master.py"); Assert.assertEquals(component.getCategory(), "MASTER"); - Assert.assertEquals(component.getExports().size(), 0); + Assert.assertEquals(component.getComponentExports().size(), 0); + Assert.assertEquals(component.getAppExports(), "QuickLinks-JMX_Endpoint,QuickLinks-Master_Status"); found++; } if (component.getName().equals("HBASE_REGIONSERVER")) { @@ -506,9 +509,9 @@ public class TestAgentProviderService { Assert.assertNull(component.getMaxInstanceCount()); Assert.assertEquals(component.getCommandScript().getScript(), "scripts/hbase_regionserver.py"); Assert.assertEquals(component.getCategory(), "SLAVE"); - Assert.assertEquals(component.getExports().size(), 2); - List<Export> es = component.getExports(); - Export e = es.get(0); + Assert.assertEquals(component.getComponentExports().size(), 2); + List<ComponentExport> es = component.getComponentExports(); + ComponentExport e = es.get(0); Assert.assertEquals(e.getName(), "PropertyA"); Assert.assertEquals(e.getValue(), "${THIS_HOST}:${site.global.listen_port}"); e = es.get(1); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc9561d5/slider-core/src/test/resources/org/apache/slider/providers/agent/application/metadata/metainfo.xml ---------------------------------------------------------------------- diff --git a/slider-core/src/test/resources/org/apache/slider/providers/agent/application/metadata/metainfo.xml b/slider-core/src/test/resources/org/apache/slider/providers/agent/application/metadata/metainfo.xml index 3d24f96..d9004ad 100644 --- a/slider-core/src/test/resources/org/apache/slider/providers/agent/application/metadata/metainfo.xml +++ b/slider-core/src/test/resources/org/apache/slider/providers/agent/application/metadata/metainfo.xml @@ -22,11 +22,67 @@ <name>STORM</name> <comment>Apache Hadoop Stream processing framework</comment> <version>0.9.1.2.1</version> + <exportedConfigs>storm-site</exportedConfigs> + + <exportGroups> + <exportGroup> + <name>QuickLinks</name> + <exports> + <export> + <name>app.jmx</name> + <value>http://${STORM_REST_API_HOST}:${site.global.rest_api_port}/api/cluster/summary</value> + </export> + <export> + <name>app.monitor</name> + <value>http://${STORM_UI_SERVER_HOST}:${site.storm-site.ui.port}</value> + </export> + <export> + <name>app.metrics</name> + <value>http://${site.global.ganglia_server_host}/cgi-bin/rrd.py?c=${site.global.ganglia_server_id}</value> + </export> + <export> + <name>ganglia.ui</name> + <value>http://${site.global.ganglia_server_host}/ganglia?c=${site.global.ganglia_server_id}</value> + </export> + <export> + <name>nimbus.url</name> + <value>http://${NIMBUS_HOST}:${site.storm-site.nimbus.thrift.port}</value> + </export> + </exports> + </exportGroup> + </exportGroups> + + <commandOrders> + <commandOrder> + <command>NIMBUS-START</command> + <requires>SUPERVISOR-INSTALLED,STORM_UI_SERVER-INSTALLED,DRPC_SERVER-INSTALLED,STORM_REST_API-INSTALLED + </requires> + </commandOrder> + <commandOrder> + <command>SUPERVISOR-START</command> + <requires>NIMBUS-STARTED</requires> + </commandOrder> + <commandOrder> + <command>DRPC_SERVER-START</command> + <requires>NIMBUS-STARTED</requires> + </commandOrder> + <commandOrder> + <command>STORM_REST_API-START</command> + <requires>NIMBUS-STARTED,DRPC_SERVER-STARTED,STORM_UI_SERVER-STARTED</requires> + </commandOrder> + <commandOrder> + <command>STORM_UI_SERVER-START</command> + <requires>NIMBUS-STARTED</requires> + </commandOrder> + </commandOrders> + <components> <component> <name>NIMBUS</name> <category>MASTER</category> + <autoStartOnFailure>true</autoStartOnFailure> + <appExports>QuickLinks-nimbus.url,QuickLinks-ganglia.ui,QuickLinks-app.metrics</appExports> <commandScript> <script>scripts/nimbus.py</script> <scriptType>PYTHON</scriptType> @@ -37,6 +93,8 @@ <component> <name>STORM_REST_API</name> <category>MASTER</category> + <autoStartOnFailure>true</autoStartOnFailure> + <appExports>QuickLinks-app.jmx</appExports> <commandScript> <script>scripts/rest_api.py</script> <scriptType>PYTHON</scriptType> @@ -47,6 +105,13 @@ <component> <name>SUPERVISOR</name> <category>SLAVE</category> + <autoStartOnFailure>true</autoStartOnFailure> + <componentExports> + <componentExport> + <name>log_viewer_port</name> + <value>${THIS_HOST}:${site.storm-site.logviewer.port}</value> + </componentExport> + </componentExports> <commandScript> <script>scripts/supervisor.py</script> <scriptType>PYTHON</scriptType> @@ -57,6 +122,9 @@ <component> <name>STORM_UI_SERVER</name> <category>MASTER</category> + <publishConfig>true</publishConfig> + <appExports>QuickLinks-app.monitor</appExports> + <autoStartOnFailure>true</autoStartOnFailure> <commandScript> <script>scripts/ui_server.py</script> <scriptType>PYTHON</scriptType> @@ -67,6 +135,7 @@ <component> <name>DRPC_SERVER</name> <category>MASTER</category> + <autoStartOnFailure>true</autoStartOnFailure> <commandScript> <script>scripts/drpc_server.py</script> <scriptType>PYTHON</scriptType> @@ -86,10 +155,5 @@ </packages> </osSpecific> </osSpecifics> - - <configuration-dependencies> - <config-type>storm-site</config-type> - <config-type>global</config-type> - </configuration-dependencies> </application> </metainfo>