<?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 sorted, distributed key/value store is a robust,
        scalable, high performance data storage system that features cell-based
        access control and customizable server-side processing. It is based on
        Google's BigTable design and is built on top of Apache Hadoop,
        Zookeeper, and Thrift.
        Requirements:
        1. Ensure parent dir for path (accumulo-site/instance.dfs.dir) is accessible to the App owner.
      </comment>
      <version>1.5.1</version>
      <exportGroups>
        <exportGroup>
          <name>QuickLinks</name>
          <exports>
            <export>
              <name>org.apache.slider.monitor</name>
              <value>http://${ACCUMULO_MONITOR_HOST}:${site.accumulo-site.monitor.port.client}</value>
            </export>
            <export>
              <name>org.apache.slider.jmx</name>
              <value>http://${ACCUMULO_MONITOR_HOST}:${site.accumulo-site.monitor.port.client}/xml</value>
            </export>
          </exports>
        </exportGroup>
      </exportGroups>
      <commandOrders>
        <commandOrder>
          <command>ACCUMULO_MASTER-START</command>
          <requires>ACCUMULO_MONITOR-INSTALLED</requires>
        </commandOrder>
        <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>
          <publishConfig>true</publishConfig>
          <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>
