<?xml version="1.0"?>
<!--
   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.
-->

<metainfo>
  <schemaVersion>2.0</schemaVersion>
  <services>
    <service>
      <name>STORM</name>
      <comment>Apache Hadoop Stream processing framework</comment>
      <version>0.9.1.2.1</version>

      <commandOrders>
        <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>
          <commandScript>
            <script>scripts/nimbus.py</script>
            <scriptType>PYTHON</scriptType>
            <timeout>600</timeout>
          </commandScript>
        </component>

        <component>
          <name>STORM_REST_API</name>
          <category>MASTER</category>
          <commandScript>
            <script>scripts/rest_api.py</script>
            <scriptType>PYTHON</scriptType>
            <timeout>600</timeout>
          </commandScript>
        </component>

        <component>
          <name>SUPERVISOR</name>
          <category>SLAVE</category>
          <commandScript>
            <script>scripts/supervisor.py</script>
            <scriptType>PYTHON</scriptType>
            <timeout>600</timeout>
          </commandScript>
        </component>

        <component>
          <name>STORM_UI_SERVER</name>
          <category>MASTER</category>
          <commandScript>
            <script>scripts/ui_server.py</script>
            <scriptType>PYTHON</scriptType>
            <timeout>600</timeout>
          </commandScript>
        </component>

        <component>
          <name>DRPC_SERVER</name>
          <category>MASTER</category>
          <commandScript>
            <script>scripts/drpc_server.py</script>
            <scriptType>PYTHON</scriptType>
            <timeout>600</timeout>
          </commandScript>
        </component>
      </components>

      <osSpecifics>
        <osSpecific>
          <osType>any</osType>
          <packages>
            <package>
              <type>tarball</type>
              <name>files/apache-storm-0.9.1.2.1.1.0-237.tar.gz</name>
            </package>
          </packages>
        </osSpecific>
      </osSpecifics>

      <configuration-dependencies>
        <config-type>storm-site</config-type>
        <config-type>global</config-type>
      </configuration-dependencies>
    </service>
  </services>
</metainfo>
