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

# HBase
# place your local/remote hbase cluster's zookeeper quorum,
# as default, s2graph server will start standalone hbase.
#hbase.zookeeper.quorum=localhost:2181

# Secure HBase
# currently only support kerberos.
#hbase.security.auth.enable = true
#hbase.security.authentication = kerberos
#hbase.kerberos.regionserver.principal = "your principal"
#hbase.sasl.clientconfig = Client
#java.security.krb5.conf="your krb config file"
#java.security.auth.login.config="jass config file"
#realm=
#principal=
#keytab="your keytab file location"

# Asynchbase
# full list can be found at http://opentsdb.github.io/asynchbase/docs/build/html/configuration.html
#hbase.client.retries.number=10
#hbase.rpcs.buffered_flush_interval=100
#hbase.rpc.timeout=0
#hbase.zookeeper.znode.parent="/hbase"

# local retry number
# when write-write conflict occur, then S2Graph will retry as much as max.retry.number times with
# exponential backoff. max.back.off will be used maximum backoff time.
#max.retry.number=100
#max.back.off=50

# Future cache.
# when 'cacheTTL' hint is given on query, then S2Graph will squash all requests on same vertex for
# `cacheTTL` time. this reduce requests on same key in backend storage significantly.
# to squash all requests on same vertex, S2Graph use simple local LRU cache(guava) and these configs are for
# setting LRU cache on local memory.
#future.cache.max.size=10000
#future.cache.expire.after.write=60000
#future.cache.expire.after.access=60000
#future.cache.metric.interval=60000

# Local Cache
# S2Graph store metadata from metastore in local LRU cache(guava) to reduce requests into metastore.
#cache.ttl.seconds=60
#cache.max.size=100000

# Kafka
# if kafka.metadata.broker.list is set, then S2Graph publish all incomming requests into kafka
# so that OLAP query can be run on HDFS file.
#kafka.metadata.broker.list="localhost:9092"

# Meta Store
# S2Graph store metadata in JDBC-Compliant Databases(default H2, others may include MYSQL, Postgresql, etc).
# ex) to use mysql as metastore, change db.default.driver = "com.mysql.jdbc.Driver"
#     and db.default.url to point to jdbc connection.
db.default.driver = "org.h2.Driver"
db.default.url = "jdbc:h2:file:./var/metastore;MODE=MYSQL"
db.default.user = "sa"
db.default.password = "sa"
