<?xml version="1.0"?>
<?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 supports_adding_forbidden="true">
  <property require-input="false">
    <name>metadata_log_dir</name>
    <value>/var/log/atlas</value>
    <description>Atlas log directory.</description>
    <value-attributes>
      <type>directory</type>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>
  <property require-input="false">
    <name>metadata_pid_dir</name>
    <value>/var/run/atlas</value>
    <description>Atlas pid-file directory.</description>
    <value-attributes>
      <type>directory</type>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>
  <property>
    <name>metadata_user</name>
    <display-name>Metadata User</display-name>
    <value>atlas</value>
    <property-type>USER</property-type>
    <description>Metadata User Name.</description>
    <value-attributes>
      <type>user</type>
      <overridable>false</overridable>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>
  <property>
    <name>metadata_opts</name>
    <value>-Dlog4j.configuration=atlas-log4j.xml</value>
    <description>Metadata Server command line options.</description>
    <on-ambari-upgrade add="true"/>
  </property>
  <property>
    <name>metadata_classpath</name>
    <value> </value>
    <description>Metadata Server additional classpath.</description>
    <on-ambari-upgrade add="true"/>
  </property>
  <property require-input="false">
    <name>metadata_data_dir</name>
    <value>/var/lib/atlas/data</value>
    <description>Atlas data directory.</description>
    <value-attributes>
      <type>directory</type>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>
  <property require-input="false">
    <name>metadata_expanded_war_dir</name>
    <value>./server/webapp</value>
    <description>Atlas expanded WAR directory.</description>
    <on-ambari-upgrade add="true"/>
  </property>
  <property>
    <name>metadata_conf_file</name>
    <value>atlas-application.properties</value>
    <description>Atlas configuration file</description>
    <value-attributes>
      <read-only>true</read-only>
      <overridable>false</overridable>
      <visible>false</visible>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>
  <property>
    <name>atlas_solr_shards</name>
    <value>1</value>
    <description>The number of shards set for Infra SOLR.</description>
    <on-ambari-upgrade add="true"/>
  </property>
  <property>
    <name>atlas_solr_shards</name>
    <value>1</value>
    <description>The number of shards set for collections created in LogSearch SOLR.</description>
    <on-ambari-upgrade add="true"/>
  </property>
  <!-- metadata-env.sh -->
  <property>
    <name>content</name>
    <display-name>atlas-env template</display-name>
    <description>This is the jinja template for metadata-env.sh file</description>
    <value>
      # The java implementation to use. If JAVA_HOME is not found we expect java and jar to be in path
      export JAVA_HOME={{java64_home}}

      # any additional java opts you want to set. This will apply to both client and server operations
      {% if security_enabled %}
      export ATLAS_OPTS="{{metadata_opts}} -Djava.security.auth.login.config={{atlas_jaas_file}}"
      {% else %}
      export ATLAS_OPTS="{{metadata_opts}}"
      {% endif %}

      # metadata configuration directory
      export ATLAS_CONF={{conf_dir}}

      # Where log files are stored. Defatult is logs directory under the base install location
      export ATLAS_LOG_DIR={{log_dir}}

      # additional classpath entries
      export ATLASCPPATH={{metadata_classpath}}

      # data dir
      export ATLAS_DATA_DIR={{data_dir}}

      # pid dir
      export ATLAS_PID_DIR={{pid_dir}}

      # hbase conf dir
      export HBASE_CONF_DIR={{hbase_conf_dir}}

      # Where do you want to expand the war file. By Default it is in /server/webapp dir under the base install dir.
      export ATLAS_EXPANDED_WEBAPP_DIR={{expanded_war_dir}}
      export ATLAS_SERVER_OPTS="-server -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+PrintTenuringDistribution -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$ATLAS_LOG_DIR/atlas_server.hprof -Xloggc:$ATLAS_LOG_DIRgc-worker.log -verbose:gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1m -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCTimeStamps"
      {% if java_version == 8 %}
      export ATLAS_SERVER_HEAP="-Xms{{atlas_server_xmx}}m -Xmx{{atlas_server_xmx}}m -XX:MaxNewSize={{atlas_server_max_new_size}}m -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=512m"
      {% else %}
      export ATLAS_SERVER_HEAP="-Xms{{atlas_server_xmx}}m -Xmx{{atlas_server_xmx}}m -XX:MaxNewSize={{atlas_server_max_new_size}}m -XX:MaxPermSize=512m"
      {% endif %}
    </value>
    <value-attributes>
      <type>content</type>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>
</configuration>
