<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--

    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.

-->

<configuration>

  <property>
    <!-- Work around for ACCUMULO-2388. See Accumulo 1.6.0 release notes -->
    <name>general.rpc.timeout</name>
    <value>240s</value>
  </property>
  <property>
    <name>instance.secret</name>
    <value>muchos</value>
  </property>
  <property>
    <name>instance.volumes</name>
    <value>{{ hdfs_root }}/accumulo</value>
  </property>
  <property>
    <name>instance.zookeeper.host</name>
    <value>{{ zookeeper_connect }}</value>
  </property>
  <property>
    <name>table.durability</name>
    <value>flush</value>
  </property>
  <property>
    <name>tserver.memory.maps.native.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>tserver.readahead.concurrent.max</name>
    <value>64</value>
  </property>
  <property>
    <name>tserver.server.threads.minimum</name>
    <value>64</value>
  </property>
  <property>
    <name>tserver.walog.max.size</name>
    <value>512M</value>
  </property>
  <property>
    <name>tserver.cache.data.size</name>
    <value>{{ accumulo_dcache_size }}</value>
  </property>
  <property>
    <name>tserver.cache.index.size</name>
    <value>{{ accumulo_icache_size }}</value>
  </property>
  <property>
    <name>tserver.memory.maps.max</name>
    <value>{{ accumulo_imap_size }}</value>
  </property>
  <property>
    <name>tserver.sort.buffer.size</name>
    <value>50M</value>
  </property>
  <property>
    <name>tserver.wal.sync.method</name>
    <value>hflush</value>
  </property>
  <property>
    <name>general.classpaths</name>
    <value>
      $ACCUMULO_HOME/lib/accumulo-server.jar,
      $ACCUMULO_HOME/lib/accumulo-core.jar,
      $ACCUMULO_HOME/lib/accumulo-start.jar,
      $ACCUMULO_HOME/lib/accumulo-fate.jar,
      $ACCUMULO_HOME/lib/accumulo-proxy.jar,
      $ACCUMULO_HOME/lib/[^.].*.jar,
{% if zookeeper_version is version('3.5','>=') %}
      $ZOOKEEPER_HOME/lib/zookeeper[^.].*.jar,
{% else %}      
      $ZOOKEEPER_HOME/zookeeper[^.].*.jar,
{% endif %}
      $HADOOP_CONF_DIR,
      $HADOOP_PREFIX/share/hadoop/common/[^.].*.jar,
      $HADOOP_PREFIX/share/hadoop/common/lib/(?!slf4j)[^.].*.jar,
      $HADOOP_PREFIX/share/hadoop/hdfs/[^.].*.jar,
      $HADOOP_PREFIX/share/hadoop/mapreduce/[^.].*.jar,
      $HADOOP_PREFIX/share/hadoop/yarn/[^.].*.jar,
      $HADOOP_PREFIX/share/hadoop/yarn/lib/jersey.*.jar
    </value>
  </property>
</configuration>
