#
# 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.
#

#################
# Fluo properties
#################

# NOTE - All properties that have a default are set with it.  Uncomment
# a property if you want to use a value different than the default.
# Properties that have no default are uncommented and must be set by
# the user.  Most are unset except for fluo.accumulo.classpath which
# has a suggested value.

# Client properties
# -----------------
# Fluo application name
fluo.client.application.name=
# Zookeeper connection string specifying host and chroot where Fluo stores data.
# A chroot directory suffix must be specified but doesn't need to be named
# '/fluo'.  If not specified, a Fluo application cannot be initialized.
# Interpolation (i.e ${fluo.client.accumulo.zookeepers}/fluo) can be used
# when setting this to reuse Accumulo's zookeeper connection string.
fluo.client.zookeeper.connect={{ zookeeper_connect }}/fluo
# Zookeeper timeout
#fluo.client.zookeeper.timeout=30000
# Accumulo instance to connect to
fluo.client.accumulo.instance={{ accumulo_instance }}
# Accumulo user
fluo.client.accumulo.user=root
# Accumulo password
fluo.client.accumulo.password={{ accumulo_password }}
# Accumulo zookeepers
fluo.client.accumulo.zookeepers={{ zookeeper_connect }}
# Client retry timeout (in milliseconds). Set to -1 to retry forever.
#fluo.client.retry.timeout.ms=-1

# Admin properties
# ----------------
# Accumulo table to initialize
fluo.admin.accumulo.table=${fluo.client.application.name}
# HDFS root path. Should match 'fs.defaultFS' property in Hadoop's core-site.xml
fluo.admin.hdfs.root={{ hdfs_root }}
# Fluo uses iterators within Accumulo tablet servers, therefore Accumulo per
# table classpath need to be configured with a comma seperated list of uris
# where Accumulo can find Fluo jars.  These jars should be reachable from
# every tablet server.  For the default jars below, `fluo init` will place them
# in HDFS.  If you add more jars to the classpath below, you will need to
# add them to HDFS.
fluo.admin.accumulo.classpath=${fluo.admin.hdfs.root}/fluo/lib/fluo-api-{{ fluo_version }}.jar,${fluo.admin.hdfs.root}/fluo/lib/fluo-accumulo-{{ fluo_version }}.jar

# Observer properties
# -------------------
# Specifies observers
# fluo.observer.0=com.foo.Observer1
# Can optionally have configuration key values
# fluo.observer.1=com.foo.Observer2,configKey1=configVal1,configKey2=configVal2

# Transaction properties
# ----------------------
# Amount of time (in milliseconds) clients wait before rolling back transaction
#fluo.tx.rollback.time=300000

# Worker properties
# -----------------
# Number of threads in each worker instance
fluo.worker.num.threads={{ fluo_worker_threads }}

# Loader properties
# -----------------
# Number of threads each loader runs.  Can set to zero for no threads, thread
# adding Loader will execute.  Must also set fluo.loader.queue.size to zero
# when setting this to zero.
#fluo.loader.num.threads=10
# Queue size of loader
#fluo.loader.queue.size=10

# YARN properties
# ----------------
# Number of oracle yarn instances
#fluo.yarn.oracle.instances=1
# Max memory of Oracle yarn containers (in MB)
#fluo.yarn.oracle.max.memory.mb=512
# Number of oracle virtual cores
#fluo.yarn.oracle.num.cores=1
# Number of worker yarn instances
fluo.yarn.worker.instances={{ groups['workers']|length }}
# Max memory of worker YARN containers (in MB). If YARN is killing worker processes consider
# increasing twill.java.reserved.memory.mb (which defaults to 200 and is set in yarn-site.xml).
# The twill.java.reserved.memory.mb config determines the gap between the YARN memory limit set
# below and the java -Xmx setting.  For example, if max memory is 1024 and twill reserved memory
# is 200, the java -Xmx setting will be 1024-200 = 824 MB.
fluo.yarn.worker.max.memory.mb={{ fluo_worker_mem_mb }}
# Number of worker virtual cores
#fluo.yarn.worker.num.cores=1

#Metrics
#------------------
#Configure reporters for metrics.   The frequency for each type of reporter is in seconds.

#fluo.metrics.reporter.console.enable=false
#fluo.metrics.reporter.console.target=stdout
#fluo.metrics.reporter.console.rateUnit=seconds
#fluo.metrics.reporter.console.durationUnit=milliseconds
#fluo.metrics.reporter.console.frequency=60

#fluo.metrics.reporter.csv.enable=false
#fluo.metrics.reporter.csv.dir=/tmp/
#fluo.metrics.reporter.csv.rateUnit=seconds
#fluo.metrics.reporter.csv.durationUnit=milliseconds
#fluo.metrics.reporter.csv.frequency=60

{% if 'metrics' in groups %}
fluo.metrics.reporter.graphite.enable=true
fluo.metrics.reporter.graphite.host={{ groups['metrics'][0] }}
fluo.metrics.reporter.graphite.port=2003
#fluo.metrics.reporter.graphite.rateUnit=seconds
#fluo.metrics.reporter.graphite.durationUnit=milliseconds
fluo.metrics.reporter.graphite.frequency=30
#fluo.metrics.reporter.graphite.prefix=
{% else %}
#fluo.metrics.reporter.graphite.enable=false
#fluo.metrics.reporter.graphite.host=carbon.server.com
#fluo.metrics.reporter.graphite.port=8080
#fluo.metrics.reporter.graphite.rateUnit=seconds
#fluo.metrics.reporter.graphite.durationUnit=milliseconds
#fluo.metrics.reporter.graphite.frequency=60
#fluo.metrics.reporter.graphite.prefix=
{% endif %}

#fluo.metrics.reporter.jmx.enable=false
#fluo.metrics.reporter.jmx.rateUnit=seconds
#fluo.metrics.reporter.jmx.durationUnit=milliseconds

#fluo.metrics.reporter.slf4j.enable=false
#fluo.metrics.reporter.slf4j.logger=metrics
#fluo.metrics.reporter.slf4j.rateUnit=seconds
#fluo.metrics.reporter.slf4j.durationUnit=milliseconds

# MiniFluo properties
# -------------------
# Path to directory where MiniFluo stores its data
#fluo.mini.data.dir=${env:FLUO_HOME}/apps/${fluo.client.application.name}/mini
# Indicates if MiniFluo should start a MiniAccumulo cluster
#fluo.mini.start.accumulo=true

#Application properties
#---------------
#Properties with a prefix of fluo.app are stored in zookeeper at
#initialization time and can easily be retrieved by a Fluo application running
#on any node in the cluster.
#fluo.app.config1=val1
