<?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>ACCUMULO</name>
      <comment>
        The Apache Accumulo is a robust, scalable, high performance data storage system.
      </comment>
      <version>1.5.1</version>
      <exportGroups>
        <exportGroup>
          <name>QuickLinks</name>
          <exports>
            <export>
              <name>Monitor</name>
              <value>http://${ACCUMULO_MONITOR_HOST}:${site.accumulo-site.monitor.port.client}</value>
            </export>
          </exports>
        </exportGroup>
      </exportGroups>
      <commandOrders>
        <commandOrder>
          <command>ACCUMULO_TSERVER-START</command>
          <requires>ACCUMULO_MASTER-STARTED</requires>
        </commandOrder>
        <commandOrder>
          <command>ACCUMULO_MONITOR-START</command>
          <requires>ACCUMULO_MASTER-STARTED</requires>
        </commandOrder>
        <commandOrder>
          <command>ACCUMULO_GC-START</command>
          <requires>ACCUMULO_MASTER-STARTED</requires>
        </commandOrder>
        <commandOrder>
          <command>ACCUMULO_TRACER-START</command>
          <requires>ACCUMULO_MASTER-STARTED</requires>
        </commandOrder>
      </commandOrders>
      <components>
        <component>
          <name>ACCUMULO_MASTER</name>
          <category>MASTER</category>
          <commandScript>
            <script>scripts/accumulo_master.py</script>
            <scriptType>PYTHON</scriptType>
            <timeout>600</timeout>
          </commandScript>
        </component>

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

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

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

        <component>
          <name>ACCUMULO_TSERVER</name>
          <category>SLAVE</category>
          <commandScript>
            <script>scripts/accumulo_tserver.py</script>
            <scriptType>PYTHON</scriptType>
          </commandScript>
        </component>

        <component>
          <name>ACCUMULO_CLIENT</name>
          <category>CLIENT</category>
          <commandScript>
            <script>scripts/accumulo_client.py</script>
            <scriptType>PYTHON</scriptType>
          </commandScript>
        </component>
      </components>

      <osSpecifics>
        <osSpecific>
          <osType>any</osType>
          <packages>
            <package>
              <type>tarball</type>
              <name>files/accumulo-1.5.1-bin.tar.gz</name>
            </package>
          </packages>
        </osSpecific>
      </osSpecifics>

    </service>
  </services>
</metainfo>
